对于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类型的列,请不要这样做——这只适用于您将日期存储为字符串的可疑(愚蠢(情况,并且不愿意更改(您应该(