2008-10-04 38 views
26

我以前曾經教過如何在.NET的SQL查詢中設置參數(click)。使用SqlCommand +參數將數據庫值設置爲null

使用帶參數的參數很好,但是當我嘗試將數據庫中的字段設置爲空時,我不成功。該方法可能認爲我沒有設置有效的參數或沒有指定參數。

例如

Dim dc As New SqlCommand("UPDATE Activities SET [Limit] = @Limit WHERE [Activity] = @Activity", cn) 

If actLimit.ToLower() = "unlimited" Then 
    ' It's not nulling :(
    dc.Parameters.Add(New SqlParameter("Limit", Nothing)) 
Else 
    dc.Parameters.Add(New SqlParameter("Limit", ProtectAgainstXSS(actLimit))) 
End If 

有什麼我失蹤了嗎?我做錯了嗎?

回答

64

你想要DBNull。價值。

在我的共享DAL代碼,我使用的是隻是做一個輔助方法:

foreach (IDataParameter param in cmd.Parameters) 
    { 
     if (param.Value == null) param.Value = DBNull.Value; 
    } 
+0

這是一個非常好的解決方案。從現在起,我將在所有Command.Execute()調用之前使用它。 – prespic 2014-10-20 22:05:09

3

嘗試將其設置爲DbNull.Value

6

我用SqlParameterCollection擴展方法,讓我添加參數與空值。它負責將null轉換爲DBNull。 (對不起,我不精通VB)

public static class ExtensionMethods 
{ 
    public static SqlParameter AddWithNullable<T>(this SqlParameterCollection parms, 
      string parameterName, T? nullable) where T : struct 
    { 
     if (nullable.HasValue) 
      return parms.AddWithValue(parameterName, nullable.Value); 
     else 
      return parms.AddWithValue(parameterName, DBNull.Value); 
    } 
} 

用法:

string? optionalName = "Bozo"; 
cmd.Parameters.AddWithNullable("@Name", optionalName); 
相關問題