DbCommand генерирует SQL в формате даты, который MySQL не принимает - PullRequest
0 голосов
/ 31 августа 2018

У меня есть DbCommand, созданный как таковой.

DbCommand cmd = conn.CreateCommand();

Затем я создаю cmd.CommandText формата.

"Insert into myTable (`Id`,`myDate`) values (@p0,@p1)"

При работе со вторым параметром (после создания первого) у меня есть код вида.

var p2 = command.CreateParameter();
p2.ParameterName = "@p2";
p2.Value = myDateTimeObject; //not a string but an actual DateTime object
command.Parameters.Add(p2);

В моем коде у меня есть следующий раздел для выполнения DbCommand переменных.

int result = cmd.ExecuteNonQuery();

Когда я действительно выполняю это, он успешно создает следующий оператор, но этот оператор выдает ошибку, когда MySQL пытается выполнить его.

Insert into myTable (`Id`,`myDate`) values (1,'27/08/2018 16:50:30')

И когда я смотрю на ошибку, это следующее.

Код ошибки: 1292. Неправильное значение даты и времени: «27/08/2018 16:50:30» для столбца «myDate» в строке 1 0,000 с

Могу ли я что-нибудь сделать, чтобы он работал с допустимым SQL, который MySQL примет? Я рад предоставить больше информации, если это необходимо.

1 Ответ

0 голосов
/ 31 августа 2018

Я предполагаю, что вы работаете в не en-US локали и сталкиваетесь с MySQL bug # 80011 .

Один обходной путь - это отформатировать DateTime в формате, понятном для MySQL Server:

var p2 = command.CreateParameter();
p2.ParameterName = "@p2";
p2.Value = myDateTimeObject.ToString("yyyy'-'MM'-'dd' 'HH':'mm':'ss'.'ffffff", CultureInfo.InvariantCulture);
command.Parameters.Add(p2);

Другим обходным решением будет переключение на другой соединитель MySQL ADO.NET, в котором нет этой ошибки, например MySqlConnector .

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