当前位置:  开发笔记 > 后端 > 正文

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

如何解决《使用SqlCommand+参数将数据库值设置为null》经验,为你挑选了2个好方法。

我今天教过如何在这个答案中单击 .NET中的SQL查询中的参数(单击).

使用带有值的参数很好,但是当我尝试将数据库中的字段设置为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

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



1> Marc Gravell..:

你想要DBNull .Value.

在我的共享DAL代码中,我使用了一个辅助方法:

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



2> Emile Cormie..:

我使用一个SqlParameterCollection扩展方法,允许我添加一个可以为null的值的参数.它负责转换nullDBNull.(对不起,我不熟悉VB.)

public static class ExtensionMethods
{
    public static SqlParameter AddWithNullable(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);

推荐阅读
落单鸟人
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有