閱讀1003 返回首頁    go 阿裏雲 go 技術社區[雲棲]


SqlDateTime溢出類錯誤解決

錯誤:
“SqlDateTime 溢出。必須介於 1/1/1753 12:00:00 AM 和 12/31/9999 11:59:59 PM之間。”
出現這種問題多半是因為你插入或者更新數據庫時datetime字段值為空默認插入0001年01月01日造成datetime類型溢出。

原因:

關於DateTime,在將DateTime類型,插入到數據庫的時候,最容易出現的一種錯誤:“SqlDateTime 溢出。必須介於 1/1/1753 12:00:00 AM 和 12/31/9999 11:59:59 PM 之間”原因是我們在取DateTime.MinValue的值,並插入到數據庫的時候,DateTime.MinValue值範圍和數據庫DateTime類型數據範圍不一致造成的。數據庫中,DateTime類型字段,最小值1/1/1753 12:00:00,而.NET Framework中,DateTime類型,最小值為1/1/0001 0:00:00,顯然,超出了Sql的值的最小範圍,導致數據溢出的錯誤。
 
解決方法:
使用System.Data.SqlTypes.SqlDateTime.MinValue替代System.DateTime類型,這樣SqlDateTime的MinValue和Sql中DateTime的範圍吻合,就不會再出現以上的錯誤了。
 
例子:
static void Main(string[] args)
{
    try
    {
        SqlConnection conn = new SqlConnection("server=(local); database=test; Integrated
        Security=SSPI");
        conn.Open();
        SqlCommand command = new SqlCommand(
            @"INSERT INTO [Students] ([Name], [Age], [Birth]) VALUES (@name, @age, @birth)", 
            conn);
        SqlParameter p1 = new SqlParameter("@name", "acqy");
        SqlParameter p2 = new SqlParameter("@age", 27);
        SqlParameter p3 = new SqlParameter("@birth", SqlDateTime.MinValue.Value);
        command.Parameters.Add(p1);
        command.Parameters.Add(p2);
        command.Parameters.Add(p3);
        command.ExecuteNonQuery();
        conn.Close();
    }
    catch (Exception e)
    {
        Console.WriteLine(e.Message);
    }




原帖地址:https://blog.csdn.net/heicm/archive/2008/08/20/2800042.aspx

最後更新:2017-04-02 22:16:10

  上一篇:go Application_Error應用
  下一篇:go ashx中使用session