2

フォームから入力を取得し、ストアド プロシージャを呼び出してデータベースに格納する次のコードがあります。

 [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();
}

と の 3 つのフィールドがあり、Nameユーザーが入力する必要があります。データベースには、これら 3 つのフィールドからユーザーが入力したデータと、dbo.Insert Message という保存関数を使用して入力時刻を保存します。E-mailMessage

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

エントリの日付と時刻を入力パラメータとしてストアド プロシージャに渡していないことに注意してください。その必要がないからです。GETDATE()SQL Serverの組み込み関数を使用して、ユーザーがメッセージを入力した時刻を判断します。

ただし、メッセージを入力しようとすると、次のエラーが表示されます。

SqlDateTime オーバーフロー。1753 年 1 月 1 日 12:00:00AM から 9999 年 12 月 31 日 11:59:59PM の間である必要があります

4

1 に答える 1