SQL日期时间溢出异常C#.NET

5
string con = ConfigurationManager.ConnectionStrings["connectionString"].ConnectionString;

        SqlConnection cn = new SqlConnection(con);
        string insert_jobseeker = "INSERT INTO JobSeeker_Registration(Password,HintQuestion,Answer,Date)"
      + " values (@Password,@HintQuestion,@Answer,@Date)";

        SqlCommand cmd = new SqlCommand();
        cmd.Connection = cn;
        cmd.CommandType = CommandType.Text;
        cmd.CommandText = insert_jobseeker;

 cmd.Parameters.Add(new SqlParameter("@Password", SqlDbType.VarChar, 50));
            cmd.Parameters["@Password"].Value = txtPassword.Text;
            cmd.Parameters.Add(new SqlParameter("@HintQuestion", SqlDbType.VarChar, 50));
            cmd.Parameters["@HintQuestion"].Value = ddlQuestion.Text;
            cmd.Parameters.Add(new SqlParameter("@Answer", SqlDbType.VarChar, 50));
            cmd.Parameters["@Answer"].Value = txtAnswer.Text;

            **cmd.Parameters.Add(new SqlParameter("@Date", SqlDbType.DateTime));
            cmd.Parameters["@Date"].Value = System.DateTime.Now**

我得到了一个错误:

"SqlDateTime 溢出。必须介于 1/1/1753 12:00:00 AM 和 12/31/9999 11:59:59 PM 之间。"

这个问题的解决方案是什么?


注:该错误可能是因为日期或时间格式不正确导致的,可以检查一下日期和时间格式是否符合标准。

非常奇怪,System.DateTime.Now 必须在那个范围内,你确定没有在其他地方使用 DateTime.Min/Max 吗? - sll
你的数据库中日期字段有默认值吗? - Praveen Nambiar
你的系统语言环境是什么?你能检查一下你的区域日期时间设置吗?有可能你的日期没有被正确解释;从表面上看,代码看起来没问题。检查是否存在这种情况的一种方法是尝试:cmd.Parameters["@Date"].Value = System.DateTime.Now.ToString("yyyyMMdd HH:mm:ss") - 即传递一个不变的DateTime格式。一旦你确认了这是个问题,你可以做几件事情... - dash
3个回答

2
尝试在SQL Server端更改@Date的类型为DATETIME2(7),然后在您的代码中使用以下行代替:
cmd.Parameters.Add(new SqlParameter("@Date", SqlDbType.DateTime2)); 

您的代码看起来还不错,但由于本地化问题或区域/时间设置出了问题,可能会影响转换。因此请尝试以下方法。


0
“Date”是一个关键字,请勿将其用作列名。 如果一定要使用,请在插入语句中使用[]括起来:[Date] 但最好将其改为其他内容,例如“RegistrationDate”。

0
如果您正在使用SQL Server 2008或更高版本,可以按照以下步骤操作:
第1步:将@Date数据类型从DATETIME更改为DATETIME2(7) 第2步:在代码后端中使用以下内容:
SqlDbType.DateTime2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接