Как передать формат даты и времени в параметр dapper для postgresSQL? - PullRequest
0 голосов
/ 31 марта 2020

Для запроса к таблице в 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 }); 

Как можно передать формат с параметрами?

1 Ответ

0 голосов
/ 31 марта 2020

DateTime s не имеют формата, они похожи на числа (например, например, 1000 можно отформатировать как 1000.0 или 1x10 ^ 3 и т. Д. c, но это все равно всего тысяча).

Вы просто пишете запрос как:

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

Примечание: вы не ставите ' вокруг имен параметров!

И в вызове dapper вы помещаете datetime набранные параметры:

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 - это только в том случае, если вы организовали сомнительную (fooli sh) _ ситуацию хранения дат в виде строк и не хотите их менять (вы нужно)

...