SqlDateTime 溢出。必須介於 1/1/1753 12:00:00 AM 和 12/31/9999 11:59:59 PM之間

錯誤場景:

    用ASP.NET製作web網站的添加用戶功能時,調用寫好的存儲過程出錯哭


錯誤提示:



出錯原因:

    出現這種問題多半是因爲你插入或者更新數據庫時,datetime字段值爲空默認插入0001年01月01日造成datetime類型溢出。

    傳給數據庫表的時間類型值是null值。這裏的null指的是程序代碼中的null,多數出現這種情況的場景是:在程序裏面定義了一個時間類型的變量,沒有給賦值,就傳給數據庫,這時這個變量的值默認是賦成了01年01月01日;由於數據庫中DateTime類型字段,最小值是1/1/1753 12:00:00,而.NET Framework中,DateTime類型,最小值是1/1/0001 0:00:00,顯然,超出了sql的值的最小值範圍,導致數據溢出錯誤。

    我遇到的情況是:

    我是用sqlParameter傳給存儲過程需要的值,然後存儲過程用insert語句等實現添加用戶功能。有一些日期時間數據是不需要代碼給傳值的。但我的代碼裏面定義了所有的sqlparameter,多出來的sqlparameter雖然在數據庫中沒有參數接受,但如果傳進來一個有問題的datetime類型,同樣報錯。


原來如此:

    .NET Framework框架與數據庫 時間類型最小值不同,從.NET Framework框架向數據庫傳時間類型的值會出錯。


解決方法:

    使用System.Data.SqlTypes.SqlDateTime.MinValue替代System.DateTime類型,這樣SqlDateTime的MinValue和Sql中DateTime的範圍吻合,就不會再出現以上的錯誤了。

    我對日期數據處理的方式,如下所示:如果日期在文本框中不填寫,則給其賦一個最小值

       

  1. //教職工"出生日期";這裏設定一個最小日期,防止添加數據庫時,時間越界問題  
  2.         if (txtBornDate.Text.Trim() != "")  
  3.         {  
  4.             enStaff.BornDate = Convert.ToDateTime(txtBornDate.Text.Trim());  
  5.         }  
  6.         else  
  7.         {  
  8.             enStaff.BornDate = new DateTime(1900, 1, 1);  
  9.         }  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章