這是推薦的方法:是否需要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;
}
這是推薦的方法:是否需要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;
}
如果你想在一個參數傳遞null值,則需要在第二個例子中通過DBNull.Value
。
如果您指定null
作爲參數值,則該參數將不會發送到過程,這將使過程調用失敗(如果需要參數)或使用參數的默認值,這可能會或者可能不爲null。
這取決於你想要的功能。
如果您通過null
作爲值,那麼SqlCommand將視同參數根本沒有被傳遞一樣。如果它是例如存儲過程中的必需參數,那麼這會導致您的查詢失敗。
如果您通過DBNull.Value
那麼SqlCommand會將其視爲傳遞SQL null。
你的第二個例子中的代碼不能編譯 - 相反,你會得到「Operator」??「不能應用於'int?'類型的操作數和'System.DBNull'。「爲了使它工作,你需要將值作爲對象來賦值,例如'(對象)值? DBNull.Value;'。 – 2010-03-03 16:33:34
@Mike鮑威爾:嗨。事實上,你是對的。我現有的代碼與您所提到的完全相同。我忘了寫正確。 – abatishchev 2010-03-03 16:42:39