2012-05-31 18 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())'應該工作。 –

相關問題