MySQLConversionException Проблема в C # - PullRequest
2 голосов
/ 12 августа 2011

В настоящее время я занимаюсь разработкой C # MySQL Export Utility.В связи с этим я не буду знать поля или типы данных каждого поля в таблице.

Когда я экспортирую данные из таблицы в базе данных, отображается сообщение MySQLConversionException, указывающее, что он не может преобразовать дату и время MySQL в System.DateTime.Это было сделано, когда я запустил код:

if (!reader.isDBNull(fieldCount)){}

Однако, когда в этой строке было сгенерировано исключение, я исправил его, добавив Allow Zero DateTime = true в строку подключения MySQL, но не отображалошибка при запуске кода

string value = reader.getString(field);

Как обойти эту проблему, помня, что я не буду знать, какой тип данных или какое значение будет.

Спасибо за любую помощь, которую вы можете предоставить.

Ответы [ 3 ]

3 голосов
/ 17 августа 2011

Вы можете получить необработанное значение как объект:

object value = reader[field];

Затем решите, что делать, основываясь на его типе:

if (value is string)
{
    string sVal = value.ToString();
    //handle as string...
}
else if (value is DateTime)
{
    DateTime dtVal = (DateTime)value;
    //handle as DateTime...
}
else
{
    //some other type
}

Возможно, не элегантно, но должно работать.*

2 голосов
/ 17 августа 2011

Если вы читаете значения DATETIME с помощью MySQL Connector / Net и устанавливаете «Allow Zero Datetime», то вам следует использовать метод reader.GetValue (); в этом случае читатель вернет объект MySqlDateTime со значением «0000-00-00 00:00:00».

Ссылка на параметры строки соединителя / сетевого соединения

Обратите внимание, что .NET DateTime.MinValue = 00: 00: 00.0000000, 1 января, 0001.

Также попробуйте dotConnect для компонентов MySQL .

1 голос
/ 12 августа 2011

Я решил проблему, подобную этой, в моем старом проекте с открытым исходным кодом. Посмотрите здесь в моем методе Util.DefaultConvert ().

Хитрость в том, чтобы использовать Type.GetTypeCode() и включить результат.

Затем выполните строгое преобразование для каждого типа. Скорее всего, есть другой код, который вы можете проверить, чтобы сделать то, что вам нужно. У меня также есть провайдер MySql.

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