更新无效。
sqlstr ="UPDATE emp SET bDate='"+Convert.ToDateTime(txtbDate.Text)+"'";
无法更新emp表。 我也试过使用Parse方法。 它会抛出错误消息: 将char数据类型转换为datetime数据类型会导致日期时间值超出范围。声明已经终止。
答案 0 :(得分:4)
接受用户输入时,应始终使用sql参数。这可能会解决您的问题并提高安全性。试试这个:
sqlstr ="UPDATE emp SET bDate=@bDate";
SqlCommand.Parameters.AddWithValue("@bDate", Convert.ToDateTime(txtbDate.Text));
答案 1 :(得分:3)
不要像这样使用adhoc SQL,请使用参数化SQL:
sqlstr = "UPDATE emp SET bDate=@NewDate WHERE...."
然后在您的SqlCommand上添加@NewDate参数:
YourSqlCommand.Parameters.Add("@NewDate", SqlDbType.DateTime);
YourSqlCommand.Parameters["@NewDate"].Value = Convert.ToDateTime(txtbDate.Text);
答案 2 :(得分:2)
您可以使用参数化存储过程。
.net日期时间包含的值多于SQL DateTime,因此超出范围错误。
参数化存储过程还提供了更多针对sql注入攻击的安全性。
答案 3 :(得分:2)
你可以一石二鸟并使用参数:
UPDATE emp SET bDate=@newDate
直接用Date填充参数值,使用DateTime.Parse()进行转换。这也消除了您现在的SQl注入问题。
答案 4 :(得分:1)
您是否尝试将日期值解析为SQL格式(yyyy-MM-dd),例如2000-12-31
Convert.ToDateTime(txtbDate.Text).ToString("yyyy-MM-dd");
干杯。
答案 5 :(得分:0)
使用参数将日期传递给查询 如果您使用的是ole db:
sqlstr = "UPDATE emp SET bDate=? "
command.Parameters.Add(New OleDbParameter("@bDate", Convert.ToDateTime(txtbDate.Text)))
答案 6 :(得分:0)
“将char数据类型转换为日期时间数据类型会导致日期时间值超出范围。语句已终止。”
您的日期时间不在SQL DateTime接受的范围内。你要解析什么日期?我有一些非常早期的错误(例如1/15/103)。日期存储在任意起始点的刻度中。
.net的起点是1/1/0001
SQL的起点是1/1/1753
我不确定最终价值。尝试运行这些并进行比较。代码跟踪或控制台写信线。
DateTime netDate = DateTime.MinValue;
SqlDateTime sqlDate = SqlDateTime.MinValue;
DateTime netMaxDate = DateTime.MaxValue;
SqlDateTime sqlMaxDate = SqlDateTime.MaxValue;
阅读其他人对参数化查询的看法。
答案 7 :(得分:-1)
它应该是纯字符串,因为你将它存储在sqlstr;)