我正在将 Dapper 与 Postgres npgsql 一起使用,但在使用以下命令执行 SQL 命令时遇到问题INTERVAL
。
该命令在我的代码之外运行良好。
我收到错误
Npgsql.PostgresException:'42601:“$1”处或附近的语法错误
位置:85'
位置85正是参数@ageInDays所在的位置。
我的代码是
int ageInDays = 90;
string mysql = "DELETE FROM Monitorvalues m1 WHERE lastupdate < current_date - INTERVAL @ageInDays DAY";
using (var connection = GetConnection)
{
var dynamicParameters = new DynamicParameters();
dynamicParameters.Add("ageInDays", ageInDays);
return await connection.ExecuteScalarAsync<int>(mysql, dynamicParameters);
}
我做错了什么?
您需要参数化整个间隔值,将其作为 TimeSpan 传递:
conn.Query("DELETE FROM Monitorvalues WHERE lastupdate < current_date - @Interval", new { Interval = TimeSpan.FromDays(2) });
作为替代方案,如果您确实需要根据参数化天数创建间隔,则可以使用make_interval
PG 函数为此:
conn.Query("DELETE FROM Monitorvalues WHERE lastupdate < current_date - make_interval(days => @Days)", new { Days = 2 });
PostgreSQL 不允许参数化文字表达式 (INTERVAL ...
),这就是您的代码不起作用的原因。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)