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