2014-10-30 4 views
2

на SQL Server 2005, у меня есть таблица, определенная следующим образом:SqlDateTime переполнение

SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
CREATE TABLE [dbo].[DebugTrace](
    [Timestamp] [datetime] NOT NULL CONSTRAINT [DF_DebugTrace_Timestamp] DEFAULT (getdate()), 
    [Log] [nvarchar](max) NOT NULL, 
    [id] [int] IDENTITY(1,1) NOT NULL, 
CONSTRAINT [PK_DebugTrace] PRIMARY KEY CLUSTERED 
(
    [id] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 

Как вы можете видеть, столбец Отметки имеет значение по умолчанию установлено значению GetDate().

В среде SQL Server Management Studio, (работает локально на сервере SQL), приведенный ниже код работает отлично:

insert into DebugTrace ([Log]) 
values ('test') 

"тот же" код побежал моей рабочей станции не удается:

DebugTrace trace = new DebugTrace(); 
trace.Log = "test from code"; 
DebugTraces.InsertOnSubmit(trace); 
SubmitChanges(); 

Исключение составляет:

SqlDateTime переполнение. Должно быть между 1/1/1753 12:00:00 и 31.12.19999 11:59:59 PM.

Оба запроса не устанавливают временную метку и не полагаются на значение по умолчанию, чтобы установить значение столбца. Поэтому как функция GetDate() вызывает такое исключение?

P.S. для запроса выполняется с разных компьютеров, но с той же учетной записью Windows

ответ

0

Свойство DebugTrace, сопоставленное с TimeStamp, имеет значение по умолчанию? Попробуйте дать ему значение по умолчанию при вставке из кода

DebugTrace trace = new DebugTrace(); 
trace.Log = "test from code"; 
trace.TimeStamp= Datetime.Now; 

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

+1

Спасибо за ответ. ссылка, о которой вы говорили, помогла. Использование Linqpad для выполнения одного и того же действия позволило увидеть, что фактически передано на SQL-сервер: - Параметры региона DECLARE p0 DateTime SET p0 = '0001-01-01 00: 00: 00.000' DECLARE p1 NVarChar (1000) SET p1 = 'тест из кода' - EndRegion вставить в [DebugTrace] ([Отметка], [Журнал]) зНАЧЕНИЯ (p0, p1) конвертируйте (Int, SCOPE_IDENTITY()) AS [значение] – Jaepetto

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