在Postgres中调用DB函数时, String
的类型将更改为text
, DateTime
的类型将更改为timestamp
。有没有办法确保不会发生这种情况?
设置:数据库功能:
foo(v_from character varying, v_to character varying, v_date date)
Dapper代码:
public static decimal GetValue(DateTime vdate, string cur) {
string sql = @"SELECT _public.foo(@vFrom, @vTo, @vDate)";
var data = connection.QueryFirstOrDefault<decimal>(
sql,
new
{
vFrom = cur,
vTo = cur,
vDate = valdate,
}
);
}
我收到以下错误:
Npgsql.PostgresException : 42883: Function _public.foo(text, text, timestamp without time zone) does not exist
不知何故,字符串被转换为文本而不是字符varchar。 DateTime到时间戳的类似故事。
尝试使用DynamicParameters.Add()进行变化,但结果仍然相同。
尝试这个?
public static decimal GetValue(DateTime vdate, string cur) {
string sql = @"SELECT _public.foo(@vFrom::character varying, @vTo::character varying, @vDate::date)";
var data = connection.QueryFirstOrDefault<decimal>(
sql,
new
{
vFrom = cur,
vTo = cur,
vDate = valdate,
}
);
}