gpt4 book ai didi

c# - 如何在 postgresQL 的 dapper 参数中传递日期时间格式?

转载 作者:行者123 更新时间:2023-12-03 08:47:07 26 4
gpt4 key购买 nike

对于 PostgreSQL 中的表的查询,我能够正确获取数据。

var query = "Select Id,name from employee
where
joiningTime BETWEEN '{startDateTime:yyyy-MM-dd HH:mm:ss}' AND '{endDateTime:yyyy-MM-dd HH:mm:ss}'"

数据返回正确,但由于这种方法容易被 SQL 注入(inject),所以我想将其更改为参数化方式

var query = "Select Id,name from employee
where
joiningTime BETWEEN '@startDateTime' AND '@endDateTime'"


var result = dbConnection.Query<Result>(query, new {startDateTime, endDateTime });

怎样才能带参数传递格式呢?

最佳答案

DateTime 没有格式,它们就像数字(例如,1000 可以格式化为 1000.0 或 1x10^3 等,但它仍然只是一千)。

您只需编写如下查询:

SELECT * FROM t WHERE dateCol BETWEEN @fromDate AND @toDate

注意:不要将 ' 放在参数名称周围!

在简洁的调用中,您输入日期时间类型的参数:

DateTime x = DateTime.Now.AddDays(-1);
DateTime y = DateTime.Now;
dbConnection.Query<Result>(query, new { fromDate = x, toDate = y});

如果在数据库中,您已将日期时间列设置为 varchar 并用字符串填充它们,这是您应该修复的第一件事(使它们成为正确的日期类型)..

但即使你这样做了,建议也不会改变:

DateTime x = DateTime.Now.AddDays(-1);
DateTime y = DateTime.Now;
dbConnection.Query<Result>(
"SELECT * FROM t WHERE dateCol BETWEEN @fromDate AND @toDate",
new {
fromDate = x.ToString("yyyy-MM-dd HH:mm:ss"),
toDate = y.ToString("yyyy-MM-dd HH:mm:ss")
}
);

您仍在将参数写入 SQL,现在将格式化字符串放入参数值中以匹配数据库表中的格式化字符串。如果您的表包含 DATE/TIME/TIMESTAMP 类型列,请不要这样做 - 这只适用于您安排了将日期存储为字符串的可疑(愚蠢)_情况并且不愿意更改它的情况(您应该)

关于c# - 如何在 postgresQL 的 dapper 参数中传递日期时间格式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60950663/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com