Как вставить и запросить объект DateTime в БД SQLite из C #? - PullRequest
1 голос
/ 17 марта 2010

Рассмотрим этот фрагмент кода:

string sDate = string.Format("{0:u}", this.Date);

           Conn.Open();
            Command.CommandText = "INSERT INTO TRADES VALUES(" + "\"" + this.Date + "\"" + "," +this.ATR + "," + "\"" + this.BIAS + "\"" + ")";
            Command.ExecuteNonQuery();

Обратите внимание на часть команды this.Date. Теперь Date является объектом типа DateTime среды C #, БД не хранит его (где-то на форуме SQLite было написано, что оболочка ADO.NET автоматически преобразует тип DateTime в формат ISO1806)

Но вместо этого. Дата, когда я использую sDate (показано в первой строке), тогда он сохраняется правильно.

Мой зонд на этом не заканчивается. Даже если я использую «sDate», я должен получить его с помощью запроса. И , что создает проблему

Любой запрос этого формата

SELECT * FROM <Table_Name> WHERE DATES = "YYYY-MM-DD"

ничего не возвращает, тогда как замена '=' на '>' или '<' возвращает правильные результаты. </p>

Итак, моя точка зрения:

Как запросить переменные даты из базы данных SQLite.

А если есть проблема с тем, как я его хранил (т.е. не соответствует 1806), то как мне сделать его совместимым

Ответы [ 3 ]

5 голосов
/ 17 марта 2010

Оболочка ADO.NET не может преобразовать значения DateTime в ISO 8601 (не 1806 ), если преобразовать его в строку и вставить в запрос. Для этого вам нужно использовать параметры:

Command.CommandText = "INSERT INTO TRADES VALUES (@Date, @Atr, @Bias)";
Command.Parameters.Add("@Date", this.Date);
Command.Parameters.Add("@Atr", this.ATR);
Command.Parameters.Add("@Bias", this.BIAS);
Conn.Open();
Command.ExecuteNonQuery();

(Кроме того, вы преобразовали значение DateTime в строку и поместили в переменную sDate, но затем вы все равно использовали значение DateTime для создания SQL-запроса.)

То же самое относится к получению данных:

Command.CommandText = "SELECT * FROM <Table_Name> WHERE DATES = @Date";
Command.Parameters.Add("@Date", theDate);
2 голосов
/ 17 марта 2010

О вашей второй проблеме, если SQLite хоть что-то близко к SQL Server,

SELECT * From, где Dates = "ГГГГ-ММ-ДД" не вернется, поскольку, вероятно, неявно преобразует ГГГГ-ММ-ДД в ГГГГ-ММ-ДД 00:00:00. Возможно, потребуется добавить диапазон ( например, больше или равно, чем сегодня, и меньше, чем завтра).

0 голосов
/ 17 марта 2010

@ Гуффа, я получаю сообщение «Не удается преобразовать из System.DateTime в System.Data.DbType» в этой строке:

Command.Parameters.Add ("@ Date", this.Date);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...