C# NET中的更新困难

C# NET中的更新困难,c#,.net,sql,C#,.net,Sql,更新无法工作 sqlstr ="UPDATE emp SET bDate='"+Convert.ToDateTime(txtbDate.Text)+"'"; 无法更新emp表。 我还尝试使用Parse方法。 它会抛出错误消息: 将char数据类型转换为datetime数据类型导致datetime值超出范围。语句已终止。接受用户输入时,应始终使用sql参数。这可能会解决您的问题,并提高安全性。试试这个: sqlstr ="UPDATE emp SET bDate=@bDate"; SqlCom

更新无法工作

sqlstr ="UPDATE emp SET  bDate='"+Convert.ToDateTime(txtbDate.Text)+"'";
无法更新emp表。 我还尝试使用Parse方法。 它会抛出错误消息:
将char数据类型转换为datetime数据类型导致datetime值超出范围。语句已终止。

接受用户输入时,应始终使用sql参数。这可能会解决您的问题,并提高安全性。试试这个:

sqlstr ="UPDATE emp SET bDate=@bDate";
SqlCommand.Parameters.AddWithValue("@bDate", Convert.ToDateTime(txtbDate.Text));

在接受用户输入时,您应该使用sql参数。这可能会解决您的问题,并提高安全性。试试这个:

sqlstr ="UPDATE emp SET bDate=@bDate";
SqlCommand.Parameters.AddWithValue("@bDate", Convert.ToDateTime(txtbDate.Text));

它应该是纯字符串,因为您将其存储在sqlstr中;)

它应该是纯字符串,因为您将其存储在sqlstr中;)

您可以使用参数化存储过程

.net datetime包含的值比SQL datetime多,因此会出现超出范围的错误


参数化存储过程还提供了更高的安全性来抵御sql注入攻击。

您可以使用参数化存储过程

.net datetime包含的值比SQL datetime多,因此会出现超出范围的错误


参数化存储过程还提供了更高的安全性,可以抵御sql注入攻击。

您可以一箭双雕,并使用一个参数:

UPDATE emp SET bDate=@newDate
YourSqlCommand.Parameters.Add("@NewDate", SqlDbType.DateTime);
YourSqlCommand.Parameters["@NewDate"].Value = Convert.ToDateTime(txtbDate.Text);

并直接用日期填充参数值,使用DateTime.Parse()进行转换。这也消除了您现在的SQl注入问题。

您可以一箭双雕,并使用一个参数:

UPDATE emp SET bDate=@newDate
YourSqlCommand.Parameters.Add("@NewDate", SqlDbType.DateTime);
YourSqlCommand.Parameters["@NewDate"].Value = Convert.ToDateTime(txtbDate.Text);

并直接用日期填充参数值,使用DateTime.Parse()进行转换。这也消除了您现在的SQl注入问题。

不要像这样使用临时SQl,请使用参数化SQl:

sqlstr = "UPDATE emp SET bDate=@NewDate WHERE...."
然后在SqlCommand上添加@NewDate参数:

UPDATE emp SET bDate=@newDate
YourSqlCommand.Parameters.Add("@NewDate", SqlDbType.DateTime);
YourSqlCommand.Parameters["@NewDate"].Value = Convert.ToDateTime(txtbDate.Text);

不要像这样使用临时SQL,请使用参数化SQL:

sqlstr = "UPDATE emp SET bDate=@NewDate WHERE...."
然后在SqlCommand上添加@NewDate参数:

UPDATE emp SET bDate=@newDate
YourSqlCommand.Parameters.Add("@NewDate", SqlDbType.DateTime);
YourSqlCommand.Parameters["@NewDate"].Value = Convert.ToDateTime(txtbDate.Text);

使用参数将日期传递给查询 如果您使用的是ole db,请执行以下操作:

sqlstr = "UPDATE emp SET bDate=? "
command.Parameters.Add(New OleDbParameter("@bDate", Convert.ToDateTime(txtbDate.Text)))

使用参数将日期传递给查询 如果您使用ole db,则为:

sqlstr = "UPDATE emp SET bDate=? "
command.Parameters.Add(New OleDbParameter("@bDate", Convert.ToDateTime(txtbDate.Text)))

您是否尝试将日期值解析为SQL格式(yyyy-MM-dd),例如2000-12-31

Convert.ToDateTime(txtbDate.Text).ToString("yyyy-MM-dd");

干杯。

您是否尝试将日期值解析为SQL格式(yyyy-MM-dd),例如2000-12-31

Convert.ToDateTime(txtbDate.Text).ToString("yyyy-MM-dd");
干杯。

“将char数据类型转换为datetime数据类型导致datetime值超出范围。该语句已终止。”

您的日期时间不在SQL日期时间接受的范围内。你想解析什么日期?对于一些非常早的日期(例如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

阅读其他人对参数化查询的看法

“将char数据类型转换为datetime数据类型导致datetime值超出范围。该语句已终止。”

您的日期时间不在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


阅读其他人对参数化查询的看法

只是一个有趣的音符;如果您的格式为以下格式:YYYY-MM-DD HH:MM:SS(例如,2009-08-12 12:27:50),则无论您的区域设置如何,SQL Server都会正确解析它。有关参数为何是您的朋友,请参阅:这是一个有趣的注释;如果您的格式为以下格式:YYYY-MM-DD HH:MM:SS(例如,2009-08-12 12:27:50),则无论您的区域设置如何,SQL Server都会正确解析该格式。请参阅为什么参数是您的朋友:我同意参数化,但建议不要使用.AddWithValue,因为它的行为可能与您预期的不同,因为您实际上没有指定基础数据类型。e、 g.我同意参数化,但建议不要使用.AddWithValue,因为它的行为可能与您预期的不同,因为您实际上没有指定基础数据类型。e、 我将很快用参数化查询测试您的解决方案。但是Convert.ToDateTime(txtbDate.Text).ToString(“yyyy-MM-dd”)可以完美地工作。我试了半天以上。谢谢dkartopr谢谢allI很快将用参数化查询测试您的解决方案。但是Convert.ToDateTime(txtbDate.Text).ToString(“yyyy-MM-dd”)可以完美地工作。我试了半天以上。谢谢你,德卡托普,谢谢你为什么投票被否决了?这直接解决了他的实际错误(由于日期时间超出范围而导致转换失败),为什么会被否决?这直接解决了他的实际错误(由于日期时间超出范围而导致转换失败)