Ошибка преобразования типа данных varchar в datetime при запуске необработанного SQL, но не при вызове LINQ to SQL - PullRequest
3 голосов
/ 10 ноября 2009

Клиент получает ошибку при запуске моего кода. Мне прислали SQL от профилдера.

Когда я вставляю его в SQL Server Management Studio, происходит сбой с: Ошибка преобразования типа данных varchar в datetime

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

Для тестирования я создал простое приложение с L2S-текстом данных, содержащим одну сущность, которая выглядит примерно так:

public class UserAccount 
{
    public int Id { get; set; }
    public string Username { get; set; }
    public DateTime? LastActivity { get; set; }
}

Вставьте запись, а затем обновите ее:

var account = db.UserAccounts.Single(a => a.Username == "Mojo");
account.LastActivity = DateTime.Now;
db.SubmitChanges();

Записи обновляются в базе данных. Но когда я беру T-SQL из Profiler:

exec sp_executesql N'UPDATE [UserAccount] SET [LastActivity] = @p2 WHERE ([Id] = @p0) AND ([Username] = @p1) AND ([LastActivity] IS NULL)',N'@p0 int,@p1 nvarchar(4),@p2 datetime',@p0=1,@p1=N'Mojo',@p2='2009-11-10 14:04:41.7470000' 

и выполнить его в SQL Server Management Studio. Я получаю: Ошибка преобразования типа данных varchar в datetime

Что мне не хватает?

Ответы [ 5 ]

3 голосов
/ 10 ноября 2009

Проблема с лишними нулями в конце даты:

'2009-11-10 14:04:41.747' (works)
'2009-11-10 14:04:41.7470000' (error converting...)

Четыре дополнительных нуля, вероятно, просто видны в отладчике Visual Studio. LINQ не отправляет их на SQL Server.

1 голос
/ 11 ноября 2009

DATETIME должен иметь только 3 цифры после секунды, DATETIME2 имеет 7 цифр после секунды. Кажется, что строка отформатирована для DATETIME2.

1 голос
/ 10 ноября 2009

Возможно разные версии SQL Server?

Дополнительные нули в дате сделают ее типом datetime2, который будет приемлем в 2008 году, но не в 2005 году.

1 голос
/ 10 ноября 2009

Используете ли вы идентичные подключения в Management Studio, как в тестовом приложении? Похоже, что это не тот случай, когда соединения имеют разные региональные настройки, что приводит к разному анализу даты.

0 голосов
/ 03 декабря 2012

Я получил эту ошибку, когда пытался вставить дату как «1/1/0001 12:00:00 AM»

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