2012-06-14 45 views
2

我写了一个代码,用于存储当前日期的&时间值。正如我想要的那样,它前天工作得很好。但今天它显示错误"Arithmetic overflow error converting expression to data type datetime. The statement has been terminated."C#日期时间算术溢出错误

任何机构可以帮助我吗?这里是我的代码,

protected void Button1_Click(object sender, EventArgs e) 
{ 
    con.Open(); 
    string q; 
    q = "insert into tbl_MR(RequirementFor,Category,MRNO,CreatedBy,CreatedDate)values(@rf,@cat,@mr,@cb,@cd)"; 
    SqlCommand cmd = new SqlCommand(q, con); 
    cmd.Parameters.AddWithValue("@rf", CCddl.SelectedItem.Text); 
    cmd.Parameters.AddWithValue("@mr", TextBox1.Text.Trim()); 
    cmd.Parameters.AddWithValue("@cat", TextBox3.Text.Trim()); 
    cmd.Parameters.AddWithValue("@cb", Session["loginid"].ToString()); 
    string cd1, date1; 
    cd1 = System.DateTime.Today.ToShortDateString(); 
    date1 = Convert.ToDateTime(cd1).ToString("dd/MM/yyyy"); 
    cmd.Parameters.AddWithValue("@cd", date1.ToString()); 
    cmd.ExecuteNonQuery(); 
    string alertmessage = ""; 
    alertmessage = "Component Details Saved"; 
    this.CreateMessageAlert(this, alertmessage, "alertKey"); 
    con.Close(); 
} 

回答

3

您不需要将日期转换为字符串以便将其发送到SQL Server。

代替这一切:

string cd1, date1; 
cd1 = System.DateTime.Today.ToShortDateString(); 
date1 = Convert.ToDateTime(cd1).ToString("dd/MM/yyyy"); 
cmd.Parameters.AddWithValue("@cd", date1.ToString()); 

只是这样做:

cmd.Parameters.AddWithValue("@cd", DateTime.Today); 
+0

感谢朋友,完成 – user1455232

+2

检查'DateTime'是否在有效范围内也是一个好主意; 'DateTime'的最小日期为'0000/01/01',而SQL日期时间的最小日期为'1753/01/01'。在这种情况下也会发生'算术溢出'错误。 –

1

date1格式更改为yyyy/MM/ddMM/dd/yyyy

昨天是2012年6月12日。实际上插入数据库的是2012年12月6日(12/06与06/12)。现在,今天是13号,因为没有第13个月,你会得到例外。

+0

YYYY/MM/DD是普遍的。 –

0

听起来像你有文化信息差异。您可以尝试将日期的ToString()方法修改为其他格式。

cmd.Parameters.AddWithValue("@cd", System.DateTime.Now.ToString("yyyyMMdd", CultureInfo.InvariantCulture));