如何通过参数化查询在数据库中插入空值

Posted

技术标签:

【中文标题】如何通过参数化查询在数据库中插入空值【英文标题】:How to insert null value in Database through parameterized query 【发布时间】:2013-05-19 00:07:01 【问题描述】:

我有一个datetime 数据类型:dttm

数据库字段类型也是datatime

现在我正在这样做:

if (dttm.HasValue)

    cmd.Parameters.AddWithValue("@dtb", dttm);

else

    // It should insert null value into database
    // through cmd.Parameters.AddWithValue("@dtb", _____)

如何做到这一点。

【问题讨论】:

来自msdn.microsoft.com/en-us/library/… :要添加的值。使用 DBNull.Value 代替 null,表示 null 值。 【参考方案1】:

这可以使用空合并运算符来完成:如果 dttm 的值为 null,则插入 DBNull.Value,否则将使用 dttm 的值

cmd.Parameters.AddWithValue("@dtb", dttm ?? (object) DBNull.Value);

这将消除对 if 语句的需要

【讨论】:

是的,这是最干净的方法。我不完全确定在空合并运算符的第二个操作数中进行强制转换的可行性,但它工作正常。【参考方案2】:

使用DBNull.Value

if (dttm.HasValue)

    cmd.Parameters.AddWithValue("@dtb", dttm);

else

    cmd.Parameters.AddWithValue("@dtb", DBNull.Value)

【讨论】:

【参考方案3】:

如果您的字段允许空值;

if (dttm.HasValue)

    cmd.Parameters.AddWithValue("@dtb", dttm);

else

    cmd.Parameters.AddWithValue("@dtb", DBNull.Value)

【讨论】:

以上是关于如何通过参数化查询在数据库中插入空值的主要内容,如果未能解决你的问题,请参考以下文章

如何安全地为 bigquery 节点插入转义用户输入?可以在 bigquery.insert 节点库上使用参数化查询吗?

参数化查询如何帮助防止 SQL 注入?

参数化查询如何帮助防止 SQL 注入?

迭代的参数化查询

MySQL参数化查询

如何在共享点设计器中插入查询值作为参数?