[英]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.