Я выполняю этот запрос в SQLite для .NET.
string SQL = "SELECT * FROM EmployeeStats where TransactionDateTime = '$date'";
using (SQLiteCommand command = new SQLiteCommand(SQL, DbConnection as SQLiteConnection))
{
command.Parameters.AddWithValue("$date", DateTime.Now.ToString(DateFormatterString));
SQLiteDataReader reader = command.ExecuteReader();
string query = command.CommandText;
foreach (SQLiteParameter p in command.Parameters)
{
query = query.Replace(p.ParameterName, p.Value.ToString());
}
}
Читатель возвращает нулевые строки.
Я генерирую запрос sql, используя цикл foreach. Если я выполняю запрос, сгенерированный этим циклом, вручную в базе данных, он возвращает правильные строки.
В настоящее время столбец базы данных для дат имеет значение ТЕКСТ. Однако я также попробовал DATE и TIMESTAMP и изменил дополнение к этому параметру. Но все та же проблема:
command.Parameters.Add("$date", DbType.DateTime).Value = DateTime.Now.ToString(DateFormatterString);
Посмотрите на эти изображения, показывающие, что он работает нормально при выполнении вручную.
РЕДАКТИРОВАТЬ. Я упростил пример.





SELECT * FROM EmployeeStats where TransactionDateTime = '$date'
должно быть
SELECT * FROM EmployeeStats where TransactionDateTime = $date
или @date, или :date, в зависимости от варианта SQL; в худшем случае тоже может быть
SELECT * FROM EmployeeStats where TransactionDateTime = ?
если именованные параметры не являются «вещью» для этого провайдера.
'$date' — строковый литерал, состоящий из 5 символов: $, d, a, t, e - не значение параметра с именем date
Красивый. Это ломало мне голову целую вечность. Это были одинарные кавычки вокруг моих параметров. Удалил их и заработал.