簡體   English   中英

覆蓋 ToString() 方法

[英]Override ToString() method

我需要重新定義 toString() 方法,以考慮具體情況。

當您想連接到 Oracle 時,您可以使用 Oracle.Data.Access .dll 進行連接,我遇到了客戶端版本 12 的問題,當嘗試獲取輸出參數的值並將其轉換為字符串時,您會得到單詞 "null" ,另一方面,對於版本 10 的客戶端,在執行相同操作時,會獲得 ""。

例子:

string  _value = "";

OracleConnection cone = new OracleConnection(this.conectionString);
OracleCommand cmd = new OracleCommand("schema.PKG.sp_null_test", cone);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("po_mensaje", OracleDbType.Varchar2,300);
cmd.Parameters["po_mensaje"].Direction = ParameterDirection.Output;

try
{
   cone.Open();
   cmd.ExecuteNonQuery();
   _value = cmd.Parameters["po_mensaje"].Value.ToString();
    //This returns "" if the parameter is not loaded from the database in 
    //version 10 and "null" in 12
}
catch (OracleException ex)
{
   throw ex;
}

我試過這個:

public override string ToString()
{
   return base.Equals("null") ? "" : base.ToString();
}

但是當oracleParameter.Value的結果轉換為string時, ToString()仍然返回"null"字。

發生這種情況時,我可以讓ToString()返回""而不是"null"嗎?

一定是這樣的

public override string ToString()
{
  return base.Equals(DbNull.Value) ? "" : base.ToString();
}

我認為您沒有從cmd.Parameters["po_mensaje"].Value覆蓋ToString()方法。 在查看此代碼時,我相信您只是覆蓋了當前類中的ToString()方法。

要覆蓋這樣的函數,您需要擴展Value類並覆蓋那里的方法。 我相信在這一點上這太過分了。

更簡單的方法是創建一個新方法,使用cmd.Parameters["po_mensaje"].Value作為參數。

所以基本上是這樣的:

public string GetValueFromParameter(var Value)
{
    if(Value == null)
        return ""; 
    else
        return Value.ToString(); 
}

然后你可以這樣稱呼它:

try
{
   cone.Open();
   cmd.ExecuteNonQuery();
   _value = GetValueFromParameter(cmd.Parameters["po_mensaje"].Value);
    //This returns "" if the parameter is not loaded from the database in 
    //version 10 and "null" in 12
}
catch (OracleException ex)
{
   throw ex;
}

無法測試該功能,因為我沒有運行 oracle 服務器。 但你應該明白。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM