2011-06-01 201 views
1

我現在在編程中使用SQL,並且正在查詢數據庫。如果select語句沒有返回任何行,返回什麼?

scCommand = new SqlCommand("SELECT LegislationID FROM Legislation WHERE Number = @ECERegulation", sconConnection); 
     scCommand.Parameters.Add("@ECERegulation", SqlDbType.NVarChar); 
     scCommand.Parameters["@ECERegulation"].Value = strECERegulation; 

     return (int)scCommand.ExecuteScalar(); 

我的問題是,如果我的參數不匹配我查詢的表中的任何內容,會返回什麼?我需要有一個if語句來處理不匹配的ECERegulation。它會返回null嗎?或者它會返回零立法ID?任何幫助,將不勝感激。

+9

什麼阻止你試圖找出? – 2011-06-01 18:21:16

+1

或閱讀MSDN的ExecuteScalar看看它是否告訴你? – Nik 2011-06-01 18:22:45

回答

4

docs

返回值
第一行的在結果集中的第一列,或空引用(沒有在Visual Basic)如果結果集是空的。返回最多2033個字符。

1

如果沒有找到記錄,則返回NULL。所以你會得到一個鑄造錯誤。

您需要在投射前檢查結果是否爲空。並根據您的業務規則決定是否拋出異常或返回零。

+0

事實上錯了。如果查詢返回一個包含數據庫NULL的單個記錄,則返回'DBNull'(特別是);那就是你得到鑄造錯誤的地方。查詢返回0條記錄時返回'null';沒有鑄造錯誤。 – 2015-07-09 15:17:46

1

可以使用空值< int>來匹配null。您也可以傳遞投射錯誤並像這樣返回null。

int? GetSomething() 
{ 
    ..... 
    ..... 
    return (int?)TypeDescriptor.GetConverter(typeof(int?)).ConvertFrom(scCommand.ExecuteScalar()); 
}