2013-02-18 5 views
2

У меня возникла странная проблема с вводом значения даты в мою базу данных. Когда я отлаживал свою программу, я понял, что она вставляет первые пять строк в базу данных, а на шестом она выдает исключение. Я проверил, была ли это синтаксическая ошибка или что-то изменилось в пути, проверив первые 5 запросов, которые могли успешно выполняться с шестой, и они оба одинаковы. Если есть проблема с типом, он должен сгенерировать исключение с самого начала. Как вы думаете?Ошибка ввода значений даты в базу данных

Это ошибка я получаю

Превращение символьного типа данных в тип данных даты и времени привело к значению даты и времени вне-диапазона.

+2

Вы можете разместить свой код, если это возможно? – Zaki

+0

Покажите нам свой код. – coder

ответ

5

Превращение символьного типа данных в тип данных даты и времени привело к значению даты и времени вне-диапазона.

Это означает, что вы указываете значение как строку и выполняете преобразование. Не делай этого. Избегайте конверсий строк, где бы вы ни находились. (Я подозреваю, что существует довольно развязка между строковым форматом, который вы предоставляете, и тем, который используется для синтаксического анализа. Исключение преобразования строк является лучшим решением для этого.)

Вместо этого укажите значение как SqlParameter с величиной DateTime.

+0

Да, я сделал что-то подобное, поэтому я могу указать, в каком формате мне нужна дата в 'string affectation_date = DateTime.Now.ToString (" yyyy/MM/dd hh: mm: ss ");'. Я попробую то, что вы предложили, но как он вставляет несколько строк, прежде чем выбрасывать исключение? – Malyk

+1

@Malyk: Но значение в базе данных * не должно быть строкой, начинающейся с *. Избавьтесь от преобразования строк, и вам не нужно думать о том, какой формат используется - это не проблема. Посмотрите на строки, которые были вставлены успешно, а тот, который не был - мой * угадай *, заключается в том, что вы обнаружите, что те, которые были вставлены успешно, имели день 12 или менее. О, и использование 'hh' потеряло бы данные в любом случае - это 12-часовые часы. Именно по этой причине вы не должны делать преобразования строк. –

+0

Вы правы, когда число дней меньше 12. Тогда я буду использовать 'SqlParameter'. Спасибо за помощь. – Malyk

0

Я думаю, что ваша проблема возникает из-за разницы между типом DateTime в C#, который начинается с 01-01-0001 и на SQL Server, который является «1 января 1753 года, 31 декабря 9999», check this link, поэтому я думаю (из-за ошибки Jon объяснил) вы пытаетесь вставить значение Date, которое меньше 01-01-1753 в SQL Server. Вот почему SQL Exception отображается.

Смежные вопросы