Таинственное преобразование типа данных в ошибку другого типа - PullRequest
1 голос
/ 22 марта 2012

У меня есть веб-проект, прекрасно работающий на моем веб-сервере и на моей локальной машине.

Я подписываюсь на другого провайдера сервера, потому что мне нужно перенести мое приложение в лучшее место, и когда я запускаю свое приложение, я получаю это сообщение об ошибке:

the conversion of a varchar data type to a datetime data type resulted in an out-of-range value

Но я не получаю эту ошибку ни локально, ни на другом сервере, поэтому я подумал, что это будет некоторая конфигурация SQL, к сожалению, эта ошибка просто возникает в коде, когда я выполняю запрос к базе данных, она работает отлично. Так что я вообще не знаю, что делать!

Я думаю, что это должна быть конфигурация C # .net, но я понятия не имею, с чего начать.

Поскольку приложение работает везде и в течение длительного времени, я исключил возможность проблемы кодирования.

Кстати, ошибка возникает только тогда, когда код выполняет запрос в строке: sqlDa.Fill(dt);

************************* ОБНОВЛЕНО ********************* *

Мой файл web.config, который устанавливает язык приложения, такой же, как и на других серверах. Этот сервер находится в другой стране, поэтому проблема в культуре.

Где-нибудь еще мне нужно изменить культуру для сервера? или / и как я могу увидеть культуру моей базы данных sql?

Ответы [ 6 ]

2 голосов
/ 22 марта 2012

Ну, ребята, для всех, кто мне очень помог, спасибо ...

Я решил свою проблему, и я сомневаюсь, что у кого-то будет такая же проблема, как у меня, но в любом случае, вот что я сделал, чтобы исправить:

Вам потребуется полный доступ к серверу, иначе вам придется использовать функцию CONVERT () для каждого запроса, и это будет слишком много работы.

Так чтоЯ сделал это, чтобы изменить язык по умолчанию моего пользователя на сервере sql, и это решило мою проблему. 100%

Ps: Никогда не сохраняйте значение DateTime для другого типа данных.Имея это в виду, у вас не будет такой же проблемы, как у меня!

2 голосов
/ 22 марта 2012

преобразование типа данных varchar в тип данных datetime

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

Вам следует просмотреть свой код (C # / SQL), чтобы увидеть, где это происходит, и взять под контроль преобразование. Лучшей идеей было бы полностью ее устранить. Строка не является датой.

1 голос
/ 22 марта 2012

Сообщение об ошибке поступает из базы данных, поэтому, скорее всего, вы отправляете строковое значение в базу данных, которое необходимо будет преобразовать в значение datetime.Преобразование завершается неудачно, потому что строка содержит формат даты, отличный от того, что ожидает база данных.

Вам следует использовать параметризованные запросы, чтобы отправлять значение в качестве значения даты и времени и позволить драйверу базы данных беспокоиться о его отправке.в базу данных.

1 голос
/ 22 марта 2012

Может ли преобразование строки в дату зависеть от того, находится ли сервер в другой локали? Вы не должны хранить даты в виде строк, вы просто напрашиваетесь на неприятности.

Как вы делаете преобразование в коде? В какой локали хранятся ваши даты в БД? Вы указываете местное, которое будет использоваться при конвертации в дату?

1 голос
/ 22 марта 2012

Я подозреваю, что это связано с языком сервера; или локаль машины SQL; или в основном потому, что они не совпадают.

0 голосов
/ 22 марта 2012

Как уже отмечали другие, это проблема локали / культуры.Возможно, вы передаете дату в предложении where: SELECT ... WHERE RecordDate>=<your date>

При передаче дат в базу данных всегда форматируйте их в формате yyyy-MM-dd.База данных поймет это независимо от настроек.

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