Проблема формата даты и времени на сервере sql - PullRequest
0 голосов
/ 30 января 2010

У меня есть приложение на asp.net, которое до недавнего времени работало нормально, когда я изменил формат даты и времени в региональных и языковых настройках панели управления.

Формат даты и времени был установлен по умолчанию при установке XP. Я выбрал индийское стандартное время при установке XP.

Я изменил формат даты и времени на дд / мм / гггг ЧЧ: мм: сс. И мое приложение начало выдавать исключение всякий раз, когда я пытался вставить в таблицу любое время и дату.

Исключение, которое я получаю:

System.Data.SqlClient.SqlException: Ошибка преобразования типа данных varchar в datetime.

Пожалуйста, помогите мне в этом

Ответы [ 3 ]

2 голосов
/ 30 января 2010

Трудно точно понять, что происходит, не видя код, который выдает. Тем не менее, если вам нужно сообщать даты в SQL Server, обычно рекомендуется использовать стандарт ISO 8601 для представления, поскольку он однозначен и не зависит от локали. Наиболее важные форматы:

  • yyyy-MM-dd для дат
  • hh:mm:ss за время
  • yyyy-MM-dd hh:mm:ss для даты / времени

Я предполагаю, что у вас есть запрос, который отправляет даты в текущей локали, а локаль на сервере не совпадает.

Редактировать: И для справки, это не исключает того, что Роб сказал в своем ответе, то есть старался вообще не передавать жестко запрограммированные даты или SQL. Это применимо, только если вам нужно по какой-то причине .

Редактировать 2: Мне сообщили, что формат yyyy-MM-dd может все же быть неправильным для некоторых локалей; поэтому вместо этого, если вам нужно передать буквальную строку даты, вы должны вместо этого использовать yyyyMMdd.

1 голос
/ 30 января 2010

Согласно моему комментарию, вы, вероятно, захотите убедиться, что вы используете код, который ведет себя аналогично приведенному ниже коду (то есть использует параметры вместо конкатенации строк)

        var myConnectionString = "connection string goes here";
        var myDateValue = DateTime.Now;
        using (var connection = new SqlConnection(myConnectionString))
        {
            using (var command = new SqlCommand("SELECT COUNT(1) FROM dbo.table WHERE datecolumn = @datevalue", connection))
            {
                var dateValueParameter = new SqlParameter("@datevalue", myDateValue);
                command.Parameters.Add(dateValueParameter);

                var result = Convert.ToInt32(command.ExecuteScalar());
            }
        }
0 голосов
/ 31 января 2010

Попробуйте добавить «Текущий язык = Ваш язык» в строку подключения к SQL-серверу. Где YourLanguage - это язык, который вы хотите использовать в SQL для чтения значений, таких как даты.

Вы можете увидеть список всех языков, поддерживаемых SQL, выполнив следующую команду SQL:

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