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

时间:2019-04-03 16:53:19

标签: c# postgresql npgsql

下午好,

我正在尝试从一段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);

如果我尝试将@type替换为DBNull.Value,如果我使用其他查询条件(例如= 0)而不是IS NULL,则会导致异常。

基础数据库是PostgreSQL,而我正在使用npgsql。

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

预先感谢

1 个答案:

答案 0 :(得分:1)

您可以声明数据类型。最好指定它以避免错误的映射,当不能自动找到类型时,必须使用它。

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

command.Parameters.Add(param);