0

我在 MS SQL 2008 中创建了一个类型为“datetime”的表。

在前端,我创建了一个输入框,它从日历控件中读取日期。

一旦用户从日历控件中选择日期,输入框就会填充所选日期。

TextBox1.Text = Calendar1.SelectedDate.ToString("dd/MM/yyyy");

然后我将如下内容添加到 SQL 命令

cmd.Parameters.AddWithValue("@date", TextBox1.Text);
cmd.ExecuteNonQuery();

当我选择直到 11 日的日期时,此代码工作正常,即 11-04-2013,只要我选择 12-04-2013 和任何一个月的 12 日以上的任何日期,我都会收到异常“算术溢出错误将表达式转换为数据类型 datetime "

让我知道我哪里出错了。

4

2 回答 2

2

直接将日期添加到参数中,您不必对其进行格式化。

cmd.Parameters.AddWithValue("@date",  Calendar1.SelectedDate);

无论格式如何, SqlServerDateTime列。你得到溢出的原因是因为它正在考虑第一部分Month,因为一年中只有12几个月,你得到了错误。格式化仅对显示日期有用。

于 2013-04-26T10:16:56.163 回答
0

这可能是由于您的系统正在使用的当前文化。我相信 SQL Server 的预期日期形式为,yyyy-MM-dd并且您的代码以某种方式与月份互换

尝试

cmd.Parameters.AddWithValue("@date", String.Format("{0:yyyy-MM-dd}", TextBox1.Text));

或转换为日期

cmd.Parameters.AddWithValue("@date", Convert.ToDateTime(TextBox1.Text));
于 2013-04-26T10:18:42.387 回答