Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在插入查询中有条件地插入空值?_C#_Sql_Visual Studio 2010_Visual Studio 2012 - Fatal编程技术网

C# 如何在插入查询中有条件地插入空值?

C# 如何在插入查询中有条件地插入空值?,c#,sql,visual-studio-2010,visual-studio-2012,C#,Sql,Visual Studio 2010,Visual Studio 2012,我想做一个insert查询,即使我插入空值,它也会插入到我的表中,但我似乎做不到 我的桌子是空的 elem1 Not null elem2 Can be null elem3 Not null elem4 Can be null 命令: InsertQuery(elem1, elem2, elem3, elem4); 或 如果两者都符合我的要求,怎么做 大概是这样的: insert into table1 values (@value1, @value2, @value3, @value4)

我想做一个insert查询,即使我插入空值,它也会插入到我的表中,但我似乎做不到

我的桌子是空的

elem1 Not null
elem2 Can be null
elem3 Not null
elem4 Can be null
命令:

InsertQuery(elem1, elem2, elem3, elem4);

如果两者都符合我的要求,怎么做

大概是这样的:

insert into table1
values (@value1, @value2, @value3, @value4)
where value2 and value4 IS NULL
但我似乎无法让它工作。

因为您包含了一个c#标记,我假设您需要能够实现这一点的代码。因此,请看一下最佳实践

查询文本如下所示:

INSERT INTO table1 VALUES (@Variable1, @variable2, @Variable3, @variable4);

始终在生产查询中命名插入列。当您在命令窗口中破解查询时,跳过字段列表是可以的,但是如果您的代码没有为列命名,那么如果向表中添加了一列,它将中断

如果您提前知道
elem2
elem4
将始终为空,只需插入
elem1
elem3

INSERT INTO table1 (elem1, elem3)
VALUES (@value1, @value3)
如果您事先不知道,请插入所有字段:

INSERT INTO table1 (elem1, elem2, elem3, elem4)
VALUES (@value1, @value2, @value3, @value4)
请注意,绑定参数时,可以将变量用于非空值,但对于空值,必须使用
DBNull.Value

if (var1 == null) {
  cmd.Parameters.AddWithValue("@value1", DBNull.Value);
} else {
  cmd.Parameters.AddWithValue("@value1", var1);
}
// and likewise for values 2, 3, and 4
您也可以使用一行程序来实现这一点,尽管它比上面的
if
方法更难阅读:

cmd.Parameters.AddWithValue("@value1", ((Object)var1) ?? DBNull.Value);
// and likewise for values 2, 3, and 4

也许,如果您编辑问题并添加真实代码,那么您可以避免对寻求调试帮助的问题进行闭包(“为什么此代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现此问题所需的最短代码。
cmd.Parameters.AddWithValue("@value1", ((Object)var1) ?? DBNull.Value);
// and likewise for values 2, 3, and 4