下午好,
我正在尝试从一段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。
有人知道为什么会这样吗?
预先感谢
答案 0 :(得分:1)
您可以声明数据类型。最好指定它以避免错误的映射,当不能自动找到类型时,必须使用它。
NpgsqlParameter param = new NpgsqlParameter("@type", System.Data.DbType.Int16);
param.Value = DBNull.Value;
command.Parameters.Add(param);