【问题标题】:Why does this query give me "Object reference not set to an instance of an object"?为什么此查询给我“对象引用未设置为对象的实例”?
【发布时间】:2012-06-06 03:05:06
【问题描述】:

这段代码:

string SidFinch = "Unknown SidFinch";

String sql = @"SELECT SidFinch 
           FROM PlatypusDuckbillS 
           WHERE PlatypusSTARTDATE = :Duckbilldate AND 
                   DuckbillID = :Duckbillid";
try {
    using (OracleCommand ocmd = new OracleCommand(sql, oc)) {
        ocmd.Parameters.Add("Duckbilldate", DuckbillDate);
        ocmd.Parameters.Add("Duckbillid", DuckbillID);
        SidFinch = ocmd.ExecuteScalar().ToString();
}

...在“ExecuteScalar”行上失败。它没有找到任何东西(我传递的 ID 没有匹配的记录),但这不应该导致这个问题,不是吗?

【问题讨论】:

标签: c# sql oracle dotconnect


【解决方案1】:

如果它没有找到任何东西 - 那么大概 .ExecuteScalar() 正在返回 NULL 并且在 NULL 上调用 .ToString() 不是一个好主意 ....

您需要将代码更改为:

object result =  ocmd.ExecuteScalar();

if(result != null)
{
    SidFinch = result.ToString();
} 
else
{
     // do whatever is appropriate here....
}

【讨论】:

  • 如果我省略了“.ToString()”,我会得到,“无法将类型 'object' 隐式转换为 'string'。存在显式转换(您是否缺少演员表?)”
  • 那是因为 SidFinch 是一个字符串。在转换为字符串之前进行空检查。
  • @Clay 可以,不过要看SidFinch是什么类型,是否可以为null。演员 (string)ocmd.ExecuteScalar()Convert.ToString(ocmd.ExecuteScalar()) 应该可以工作。
  • 您可以使用 SidFinch = ocmd.ExecuteScalar() 作为字符串,然后检查它是否不为空。 this 有点像你的问题
  • @Marc:是的,Convert.ToString(ocmd.ExecuteScalar());作品。 UCID = (String)ocmd.ExecuteScalar(); 也是如此Marcs 真的在它上面。
猜你喜欢
  • 2019-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多