2012-05-31 19 views
2

此代码:为什么这个查询会给我“对象引用未设置为对象的实例”?

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,没有匹配的记录),但是这不应该导致这个问题,如果它?

+2

只是说... dapper ... http://pastie.org/4003886 –

回答

8

如果它没有发现任何东西 - 那么想必.ExecuteScalar()将返回NULL,这不是一个好主意,打电话.ToString()NULL ....

你需要改变你的代码是这样的:

object result = ocmd.ExecuteScalar(); 

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

如果我省略“.ToString()”我得到,“不能隐式地将类型'object'转换为'string'。存在明确的转换(您是否缺少演员?)“ –

+0

这是因为SidFinch是一个字符串。在转换为字符串之前进行空检查。 – Yatrix

+1

@Clay是的,但它取决于“SidFinch”是什么类型,以及它是否可以为null。铸造'(字符串)ocmd.ExecuteScalar()'或'Convert.ToString(ocmd.ExecuteScalar())'应该工作。 –

相关问题