从C# DbCommand向SQL数据库插入NULL值

26
        DbParameter param = comm.CreateParameter();
        param = comm.CreateParameter();
        param.ParameterName = "@StaffId";
        if (!string.IsNullOrEmpty(activity.StaffId))
            param.Value = activity.StaffId;
        param.DbType = DbType.String;
        comm.Parameters.Add(param);

显然,上述方法不起作用,对象未实例化。当StaffId未填充时,我试图将NULL插入数据库。我该如何实现这一点?


1
你可以使用 DBNull.Value。 - Andrey Gurinov
太好了!如果您将此作为答案发布,我会将其标记为正确。 - SkonJeet
2
至于为什么... https://dev59.com/p2855IYBdhLWcg3wMBLV#9632050 - Marc Gravell
4个回答

47

当您需要将NULL作为参数传递给存储过程时,可以使用DBNull.Value。

param.Value = DBNull.Value;

或者你可以使用这个来代替你的if运算符:

param.Value = !string.IsNullOrEmpty(activity.StaffId) ? activity.StaffId : (object)DBNull.Value;

1
感谢您的编辑,安德烈 - 非常感谢。但对我来说,将此强制转换为对象似乎有些疯狂。 - SkonJeet

8
尝试使用 DBNull.Value
if (!string.IsNullOrEmpty(activity.StaffId))
   param.Value = activity.StaffId;
else
  param.Value=DBNull.Value;

这里有没有一种使用?运算符作为一种简写的if else语句的方法?它似乎不喜欢String/DBNull.Value转换! - SkonJeet
1
尝试这个:param.Value = !string.IsNullOrEmpty(activity.StaffId) ? activity.StaffId : (object)DBNull.Value; - Andrey Gurinov

4

您可以始终使用空值合并运算符(??)

param.Value = activity.StaffId ?? (object)DBNull.Value;

3
你可以使用 DBNull.Value
param.Value = DBNull.Value;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接