重写ToString()方法

时间:2019-08-01 13:39:08

标签: c#

我需要重新定义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"吗?

2 个答案:

答案 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服务器。 但是你应该明白这个想法。