使用SqlCommand +参数将数据库值设置为null

时间:2008-10-04 11:44:39

标签: .net sql

我之前已经教过如何在这个答案(click)中在.NET中的SQL查询中设置参数。

使用带有值的参数很好,但是当我尝试将数据库中的字段设置为null时,我不成功。该方法认为我没有设置有效参数或没有指定参数。

e.g。

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

有什么我想念的吗?我做错了吗?

3 个答案:

答案 0 :(得分:73)

你想要DBNull。值。

在我的共享DAL代码中,我使用的辅助方法就是:

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

答案 1 :(得分:7)

我使用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);

答案 2 :(得分:3)

尝试将其设置为DbNull.Value