我在C#中有一条SQL语句(针对SQL Server 2k8运行的.NET Framework 4),如下所示:

SELECT [Column1] FROM [Table1] WHERE [Column2] = @Column2


上面的查询可以与以下ADO.NET代码一起正常工作:

DbParameter parm = Factory.CreateDbParameter();
parm.Value = "SomeValue";
parm.ParameterName = "@Column2";
//etc...


即使我将DBNull.Value分配给DbParameter的Value成员,即使Column2中有空值,此查询也返回零行。如果我更改查询以专门容纳null测试:

SELECT [Column1] FROM [Table1] WHERE [Column2] IS @Column2


我在运行时收到“'@ Column2'附近的语法不正确”的异常。我无法在SELECT语句的WHERE子句中使用null或DBNull作为参数吗?

最佳答案

你可以用

SELECT [Column1] FROM [Table1] WHERE [Column2] = ISNULL(@Column2 , 'value');


“值”可以是您希望其表示的任何值。如果要匹配具有空列的column2,

SELECT [Column1] FROM [Table1] WHERE ISNULL([Column2], 'value') = ISNULL(@Column2 , 'value');

关于c# - 如何将DBNull值传递给参数化的SELECT语句?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4998151/

10-12 16:27