Я использую ibatis и C #.я получаю результат из запроса на выборку, в котором CreatedDate является одним из полей.Тип данных CreatedDate в Mysql - Дата.Я присваиваю набор результатов запроса select Ilist .
Здесь DeliveryClass CreatedDate as DateTime.Когда я запускаю приложение, я получаю Невозможно преобразовать значение даты / времени MySQL в System.DateTime .В чем может быть проблема?
MySqlConnection connect = new MySqlConnection("server=localhost; database=luttop; user=root; password=1234; pooling = false; convert zero datetime=True");
Добавление convert zero datetime=True в строку подключения автоматически преобразует 0000-00-00 Значения даты в DateTime.MinValue().
convert zero datetime=True
0000-00-00
DateTime.MinValue()
, которое РЕШЕНО
Добавление «преобразовать ноль datetime = True» в строку подключения решило мою проблему.
<connectionStrings> <add name="MyContext" connectionString="Datasource=localhost;Database=MyAppDb;Uid=root;Pwd=root;CHARSET=utf8;convert zero datetime=True" providerName="MySql.Data.MySqlClient" /> </connectionStrings>
С уважением PS
Проблема в формате, на самом деле mysql имеют другой формат (гггг-мм-дд) для типа данных дата / время, и для решения этой проблемы используйте библиотеку соединителя mysql для .net отсюда http://dev.mysql.com/downloads/connector/net/ это даст другой тип данных для даты / времени, называемый MysqlDateTime
или вы можете отформатировать данные даты / времени в своем выражении sql, используя DATE_FORMAT (дата, формат) Вы можете получить более подробную информацию здесь http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_date-format
но я не рекомендую это, потому что вы потеряете силу типа данных даты / времени (например, вы не можете сравнивать), потому что теперь вы преобразуете его в строку, но я думаю, что это будет полезно в отчетах
Я решил свою проблему, установив для столбца значение по умолчанию null, а не 0000-00-00 00:00:00:
null
0000-00-00 00:00:00
update table set date = null
Может быть вне диапазона объекта DateTime. Я видел это пару раз. Попробуйте изменить sql, чтобы вместо текущей колонки возвращалась текущая дата, и посмотрите, все ли в порядке.
Одна вещь, которая работает, тоже меняет действие вашего читателя. У меня была эта проблема, когда я писал
string myvar = reader.GetString(0);
Тогда я писал это
object myvar = reader.GetValue(0);
И больше ошибок нет.
Вам нужно сделать простое изменение со строкой соединения, которую вы добавили для базы данных MySql. Т.е. КОНВЕРТ. НУЛЕВОЙ ДАННЫЙ = ИСТИНА
<add name="NAMEOFYOURCONNECTIONSTRING" connectionString="server's HOSTNAMEorIP(i.e Localhost or IP address);user id=USER_ID(i.e User ID for login Database);Pwd=PASSWORD(i.e User Password for login Database);persistsecurityinfo=True;database=NAMEOFDATABASE;Convert Zero Datetime=True" providerName="MySql.Data.MySqlClient"/>
Это сработало для меня:
SELECT IF(tb.Date1 = '0000-00-00 00:00:00', NULL, tb.Date1) AS ValidDate FROM MyTable AS tb