ado.net中where子句中的空值参数
本文关键字:空值 参数 where net ado 子句 | 更新日期: 2023-09-27 18:20:58
如何在Ado.net中的where子句中设置一个可能为null值的Sql命令以及参数。
Sql语句:
Select * from ViewSessionTarget where AgentId = @Parameter
Ado.net代码
using (SqlConnection connection = new SqlConnection(@"my connection string"))
using (SqlCommand command = new SqlCommand(sql, connection))
{
connection.Open();
var parameter = command.Parameters.AddWithValue("@Parameter", DBNull.Value);
parameter.DbType = DbType.Int64;
SqlDataReader reader = command.ExecuteReader();
while (reader.Read())
{
Debug.Write(reader["SessionId"]);
}
}
Resultset总是有0个元素,因为在where子句中我有一个null值。所以等号(=)不起作用,我必须使用"is"。
但是当我把sql改成这样时:
Select * from ViewSessionTarget where AgentId is @Parameter
我收到一个SqlException:"'@Parameter'附近的语法不正确。"
我找到了一种更干净的方法(至少对我来说):
SELECT * FROM ViewSessionTarget
WHERE (AgentId = @Parameter OR (@Parameter IS NULL AND AgentID IS NULL));
您可以编写这样的sql查询。。。
Select * from ViewSessionTarget where AgentId = @Parameter OR @Parameter IS NULL
或者你可以创建一个小程序,也可以给你更好的性能,比如。。。。
CREATE PROCEDURE dbo.myProc
@Parameter INT
AS
BEGIN
SET NOCOUNT ON;
DECLARE @Sql NVARCHAR(MAX);
SET @Sql = N'Select * from ViewSessionTarget where 1 = 1 '
+ CASE WHEN @Parameter IS NOT NULL THEN
N'AND AgentId = @Parameter ' ELSE N' ' END
EXECUTE sp_executesql @Sql
,N'@Parameter INT '
,@Parameter
END