我需要重新定义toString()方法,以考虑特定的情况。
当您想连接到Oracle时,可以使用Oracle.Data.Access .dll进行连接,当尝试获取输出参数的值并将其转换为字符串时,客户端版本12出现问题另一方面,在客户端版本10中,您会得到单词“ null”,如果这样做,则获得“”。
示例:
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();
}
但是当ToString()
的结果转换为"null"
时,oracleParameter.Value
仍然返回string
字。
发生这种情况时,我可以让ToString()
返回""
而不是"null"
吗?
答案 0 :(得分:-1)
一定是这样
public override string ToString()
{
return base.Equals(DbNull.Value) ? "" : base.ToString();
}
答案 1 :(得分:-1)
我认为您不会从ToString()
覆盖cmd.Parameters["po_mensaje"].Value
方法。在查看这段代码时,我相信您只是从您的 current 类重写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服务器。 但是你应该明白这个想法。