SQLCommand.CreateParameter.Value = DBNull.Value不返回结果

时间:2016-05-02 21:46:51

标签: c# sql-server sql-server-2008

我有一些代码可以像这样创建一个Null参数

 p = cmd.CreateParameter();
 p.DbType = DbType.Int32;
 p.ParameterName = strName;
 p.Value = DBNull.Value;
 cmd.Parameters.Add(p);

当我插入记录时,SQLValue设置为{Null}

enter image description here

使用列的Null值正确创建记录。

当我选择一条记录来尝试检索一个Null值的记录时,使用上面相同的方法设置参数。再次参数的SQLValue是{Null}

enter image description here

所以相同的代码设置相同...但现在它不返回记录。当我想创建一个具有空值的参数(p.Value = DBNull.Value;)时,我无法检索任何记录。我一无所获。

我知道它不是查询,因为如果我将参数更改为具有值的参数,我会返回该记录。我是否缺少设置参数来查找空值?我所看到的一切都说是这样做的。

如下所述,是查询

Select * from view_full_class_nests 
where parent_interface_class_pk = @parent_interface_class_pk

同样如前所述,如果参数设置为值,则此查询正常工作...如果值为DBNull.Value

,则无法检索

以下DanD提供了有用的链接,给了我答案

需要查询从view_full_class_nests中选择* 其中parent_interface_class_pk = @parent_interface_class_pk或@parent_interface_pk为空

1 个答案:

答案 0 :(得分:2)

您无法在where子句中比较NULL:

来自https://msdn.microsoft.com/en-us/library/ms172138(v=vs.100).aspx

  

因为null被认为是未知的,所以两个相互比较的空值不被认为是相等的。在使用算术运算符的表达式中,如果任何操作数为null,则结果也为null。

您必须使用ISNULL运算符,请参阅下面的内容,以获得可能对您有帮助的先前答案:

Null value parameters in where clause in ado.net