更新.NET的难度

时间:2009-08-12 10:19:40

标签: c# .net sql

更新无效。

sqlstr ="UPDATE emp SET  bDate='"+Convert.ToDateTime(txtbDate.Text)+"'";

无法更新emp表。 我也试过使用Parse方法。 它会抛出错误消息: 将char数据类型转换为datetime数据类型会导致日期时间值超出范围。声明已经终止。

8 个答案:

答案 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;)