SQL Server에서 GETDATE ()를 사용하여 Dapper SqlDateTime 오버플로

asp.net-mvc-3 dapper sql sql-server

문제

폼에서 입력을 가져오고 저장 프로 시저를 호출하여 데이터베이스에 저장하는 다음 코드를 작성했습니다.

 [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-mailMessage 세 필드가 있습니다. 데이터베이스에서는 사용자가 입력 한 데이터를이 세 필드에서 저장하고 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이 오버플로됩니다. 1/1/1753 12:00:00 AM과 12/31/9999 오후 11:59:59 사이 여야합니다.

수락 된 답변

나는 다음과 같은 변화를 제안 할 것이다 :

conn.Execute(storedProcedure,
    new { Name = model.Name, Email = model.Email, Message = model.Message },
    commandType: CommandType.StoredProcedure);

실제 변경 사항은 new GuestMessage { ... }new { ... } 바꿨다는 것입니다. 내가 의심 하는 것은 GuestMessage 유형에 필요하지 않지만 추가 매개 변수가 매개 변수로 전송된다는 것입니다. DateTime 의 기본값은 "00 : 00 : 00.0000000, January 1, 0001"입니다. 그냥 new { ... } 로 바꾸면 Name , EmailMessage 로 보내는 멤버를 명시 적으로 제한 했으므로 Name , EmailMessage 한정됩니다 .

참고 : 일반 텍스트를 사용하는 경우, 날씬한 실제로 SQL에서 사용되는 매개 변수 이름을 참조하려고하는 일부 부두를 사용하지,하고는 SQL에서 참조하지 않습니다 알고 아무것도 보내지 않습니다 - 그러나, 그것은 할 수 없다 저장 프로 시저를 사용합니다.



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow