执行UPDATE命令

时间:2015-08-14 13:28:45

标签: c# sql

我写了这个来更新我的SQL表。

        mycmd.CommandText = "UPDATE savedinfo SET User_id='" + Login.GetUserID().ToString() + "', Date='" + DateTime.Now.ToLongDateString() + "', Evaluate='" + activeEvaluate.ToString() + "', TimeStart='" + dtCurrentTime1.ToLongTimeString() + "', TimeEnd='" +dtCurrentTime2.ToLongTimeString() + "' , Salary= '" + todaySalary.Text +"'";
        mycmd.Connection = con;
        mycmd.ExecuteNonQuery();

到达mycmd.ExecuteNonQuery();时出现错误:

  

类型' System.Data.SqlClient.SqlException'未处理的异常   发生在System.Data.dll

中      

附加信息:字符串或二进制数据将被截断。

     

声明已经终止。

这是什么问题? 感谢

1 个答案:

答案 0 :(得分:2)

该错误意味着您正在尝试为数据库中的列长度插入一个较大的值。请查看数据库架构并确定导致问题的列。

看一下代码片段,我还有一些其他观察结果可能会有所帮助。

Update语句是否需要where子句?

使用参数化查询,因为这有助于防止SQL注入攻击。

使用语句非常有助于清除和清理对象,在这种情况下,using语句有助于管理与数据库的开放连接。

如果您希望在将它们发送到数据库之前检查有效的字符串长度,请在创建连接之前检查参数等。理想情况下,这些检查将在您的业务逻辑层中执行。

          if (activeEvaluate.Length > 5)
          {
             throw new ArgumentException("activeEvaluate");
          }

          using (SqlConnection connection = new SqlConnection(ConnString))
          {
               using (SqlCommand cmd = connection.CreateCommand())
               {
                 cmd.CommandText = "UPDATE savedinfo set User_id= @UserId, Date = @Date, Evaluate = @Evaluate, TimeStart = @TimeStart, TimeEnd = @TimeEnd, Salary = @Salary ";

                 cmd.Parameters.AddWithValue("@UserId", Login.GetUserID());
                 cmd.Parameters.AddWithValue("@Date",  DateTime.Now.ToLongDateString());
                 cmd.Parameters.AddWithValue("@Evaluate", activeEvaluate.ToString());
                 cmd.Parameters.AddWithValue("@TimeStart", dtCurrentTime1.ToLongTimeString());
                 cmd.Parameters.AddWithValue("@TimeEnd", dtCurrentTime2.ToLongTimeString());
                 cmd.Parameters.AddWithValue("@Salary", todaySalary.Text);
                 cmd.Connection.Open();
                 cmd.ExecuteNonQuery();
              }
            }