在SQL Server中使用GETDATE()的Dapper SqlDateTime溢出

在SQL Server中使用GETDATE()的Dapper SqlDateTime溢出,sql,sql-server,asp.net-mvc-3,dapper,Sql,Sql Server,Asp.net Mvc 3,Dapper,我有下面的代码,它从表单获取输入并调用存储过程将其存储在数据库中 [HttpPost] public ActionResult Index(GuestMessage model) { if (ModelState.IsValid) { using(IDbConnection conn = DatabaseAcess.OpenConnection()) { const strin

我有下面的代码,它从表单获取输入并调用存储过程将其存储在数据库中

 [HttpPost]
 public ActionResult Index(GuestMessage model)
 {
        if (ModelState.IsValid)
        { 
            using(IDbConnection conn = DatabaseAcess.OpenConnection())
            {
                const string storedProcedure = "dbo.InsertMessage";
                conn.Execute(storedProcedure, new GuestMessage { Name = model.Name, Email = model.Email, Message = model.Message }, null, null, CommandType.StoredProcedure);

                return View("ThankYou");
            }
         }
        return View();
}
用户必须填写三个字段,
Name
E-mail
Message
。在数据库中,我使用名为dbo.Insert Message的存储函数存储用户从这三个字段输入的数据以及输入的时间

BEGIN
  BEGIN TRAN

  SET NOCOUNT ON;

  DECLARE @GuestID int;
  INSERT INTO Guest(Name, Email) VALUES (@Name, @Email);
  SELECT @GuestID = scope_identity();

  INSERT INTO Message (EntryDate, GuestID, Message, Status) 
  VALUES (GETDATE(), @GuestID, @Message, 2);

  COMMIT TRAN
END
请注意,我没有将输入日期和时间作为输入参数传递给存储过程,因为不需要这样做。我使用SQL Server中的内置函数
GETDATE()
来确定用户输入消息的时间

但是,每当我尝试输入消息时,都会出现以下错误:

SqlDateTime溢出。必须在1753年1月1日12:00:00AM和9999年12月31日11:59:59PM之间


我建议作出以下改变:

conn.Execute(storedProcedure,
    new { Name = model.Name, Email = model.Email, Message = model.Message },
    commandType: CommandType.StoredProcedure);
唯一实际的变化是我将
newguestmessage{…}
替换为
new{…}
。我怀疑正在发生的是,您的
GuestMessage
类型具有其他不需要的属性,但它将这些属性作为参数发送。保留默认值的
DateTime
为“00:00:00.00000000101年1月1日”。通过切换到新的{…},我们明确限制了我们发送给
名称
电子邮件
消息
的成员,因为这些是唯一定义的内容


注意:当使用纯文本时,dapper确实会使用一些巫毒来尝试查看SQL中实际使用了哪些参数名,并且它不会发送它知道的SQL中没有引用的任何内容-但是,它不能用存储过程来执行此操作。

你是对的,我将new GuestMessage{…}更改为new{…}它成功了。Dapper背后有一些巫毒,因为我从未将日期参数从GuestMessage对象传递到存储过程。存储过程甚至不希望看到DateTime。为了设置日期时间,我使用SQL server内置函数GETDATE()。谢谢