2010-02-27 25 views
3

這是推薦的方法:是否需要DBNull.Value爲可空類型爲SqlCommandParameter.Value

void Add(int? value) 
{ 
    command.Parameters.Add("@foo").Value = value; 
} 

void Add(int? value) 
{ 
    command.Parameters.Add("@foo").Value = (object)value ?? DBNull.Value; 
} 
+1

你的第二個例子中的代碼不能編譯 - 相反,你會得到「Operator」??「不能應用於'int?'類型的操作數和'System.DBNull'。「爲了使它工作,你需要將值作爲對象來賦值,例如'(對象)值? DBNull.Value;'。 – 2010-03-03 16:33:34

+0

@Mike鮑威爾:嗨。事實上,你是對的。我現有的代碼與您所提到的完全相同。我忘了寫正確。 – abatishchev 2010-03-03 16:42:39

回答

4

如果你想在一個參數傳遞null值,則需要在第二個例子中通過DBNull.Value

如果您指定null作爲參數值,則該參數將不會發送到過程,這將使過程調用失敗(如果需要參數)或使用參數的默認值,這可能會或者可能不爲null。

1

這取決於你想要的功能。

如果您通過null作爲值,那麼SqlCommand將視同參數根本沒有被傳遞一樣。如果它是例如存儲過程中的必需參數,那麼這會導致您的查詢失敗。

如果您通過DBNull.Value那麼SqlCommand會將其視爲傳遞SQL null。