2009-02-27 64 views
0

我就在這個帖子看了上面的答案:
Problem inserting string or NULL into SQL Server database問題將字符串或NULL到SQL Server數據庫

糾正我,如果我錯了,但可以?? - 運營商不僅在兩個使用相同類型的變量,如果沒有的話,我會非常感謝,如果有人能解決我的小問題。

我試圖在我的項目中插入一些類似於下面的代碼。

Dictionary<string, string> strings = new Dictionary<string, string>() 
{ 
    {"@param0", strParam0}, 
    {"@param1", strParam1}, 
    {"@param2", strParam2} 
}; 
foreach (string param in strings.Keys) 
{ 
    cmd.Parameters.AddWithValue(param, strings[param] ?? DBNull.Value); 
} 

但是,Visual Studio中的以下消息抱怨:
「操作 '?'不能應用於'string'和'System.DBNull'類型的操作數。「

回答

0

DBNull和Null不是相同的類型,也不是可爲空的類型或引用類型和DBNull。你只能使用??具有相同類型的值。

人們可以想到的??操作者如語法糖:

(left != null) ? left : right 

和三元操作需要左,右向是相同類型的,因此,因此左和右??運營商也必須是同一類型的。

所以,不幸的是,沒有..你不能這樣做,至少不是沒有一些醜陋的鑄造。

4

嘗試:

cmd.Parameters.AddWithValue(param, (object)strings[param] ?? DBNull.Value); 
0
cmd.Parameters.AddWithValue(param, strings[param] == null ? DBNull.Value : strings[param]); 

唯一的缺陷是,它會做的字典裏查兩次!

+0

還有一個缺陷 - 它不會編譯!不管你是否使用??你不能直接從字符串轉換爲DBNull?或?:爲此。 – LukeH 2009-02-27 12:08:34