2010-11-03 75 views
1

净,我想插入一个实体的行,我不断收到以下错误:SQL日期时间溢出

SqlDateTime溢出。必须介于1/1/1753 12:00:00 AM和12/31/9999 11:59:59 PM之间。

这里是我的C#端代码:

 public static void DumpToLog(string s, string userID) 
    { 
     var ler = new LoggedExceptionRepository(); 
     var lex = new LoggedException(); 
     lex.loginID = userID; 
     lex.dateTime = DateTime.Now; 
     lex.text = s; 
     ler.Add(lex); 
     ler.Save(); 
    } 

我试着运行SQL Server事件探查器,它执行的唯一的事情是前述以下(其中,如果我直接执行对SQL服务器,它的作品! ):

exec sp_executesql N'insert [dbo].[LoggedExceptions]([text], [loginID], [dateTime]) 
values (@0, @1, @2) 
select [ID] 
from [dbo].[LoggedExceptions] 
where @@ROWCOUNT > 0 and [ID] = scope_identity()',N'@0 nvarchar(max) ,@1 varchar(50),@2 datetime',@0=N'payment failed, rv = 0',@1='riz',@2='2010-11-03 12:05:00:690' 

有关我接下来可以做什么的任何建议?

回答

0

发现此问题。我只是没有意识到我正在创建新的对象并将它们分配给代码中早些时候的现有实体。所以当它保​​存数据上下文时,它与那些较早的实体有问题。

0

如果您对日期参数值进行硬编码,它会工作吗?可能还有其他事情正在发生,或者它可能是一个误导消息。

+0

是的,我试过了。就像我说的那样,它生成的sql对数据库执行得很好。我不知道到底发生了什么错误。 – Riz 2010-11-03 19:26:24

+0

您也可以尝试硬编码loginID和文本作为日期,以查看参数值序列是否已被搞乱 – Beth 2010-11-03 19:29:27

+0

这是不可能的,因为插入数据库的代码是由实体框架 – Riz 2010-11-03 19:38:43

0

LoggedExceptions中是否有另一个日期时间列,您没有设置?在某些情况下,框架将使用DateTime.MinValue来填写未指定的列。尝试为LoggedExceptions中的所有日期时间列设置显式值。