如何在postgresSQL的dapper参数中传递日期-时间格式



对于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注入,我想将其更改为参数化方式

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等,但仍然只有1000(。

您只需编写如下查询:

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

注意:不能在参数名称周围加上'

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

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中写入参数类型,现在将格式化字符串放入参数值中,以匹配DB表中的格式化字符串。如果您的表包含DATE/TIME/TIMESTAMP类型的列,请不要这样做——这只适用于您将日期存储为字符串的可疑(愚蠢(情况,并且不愿意更改(您应该(

最新更新