在 npgsql 准备好的命令中替换准备好的查询参数的问题

Issue replacing prepared query parameters in npgsql prepared command

下午好,

我正在尝试从一段 C# 代码执行以下查询:

SELECT \"schema\".\"table\".\"field1\" AS field1, 
     SUM( \"schema\".\"table\".\"num1\" * ( CASE WHEN @type IS NULL THEN 1 WHEN @type = 1 THEN \"schema\".\"table2\".\"value1\" WHEN @type = 2 THEN \"schema\".\"table2\".\"value2\" END) )
FROM ...

在我的 C# 代码中,我将参数 @type 替换为适当的值

if (...)
     command.Parameters.AddWithValue("@type", DBNull.Value);
else if(...)
     command.Parameters.AddWithValue("@type", 1);
else
     command.Parameters.AddWithValue("@type", 2);

当它尝试用 DBNull.Value 替换 @type 时会导致异常,如果我使用另一个查询条件(例如 = 0)而不是 IS NULL 它有效。

底层数据库是postgresql,我用的是npgsql。

有人知道为什么会这样吗?

提前致谢

您可以声明数据类型。指定它总是好的,以避免错误映射,并且在无法自动找到类型时是强制性的:

NpgsqlParameter param = new  NpgsqlParameter("@type", System.Data.DbType.Int16);
param.Value = DBNull.Value;

command.Parameters.Add(param);