C# 执行更新命令

C# 执行更新命令,c#,sql,C#,Sql,我写这篇文章是为了更新我的SQL表 mycmd.CommandText = "UPDATE savedinfo SET User_id='" + Login.GetUserID().ToString() + "', Date='" + DateTime.Now.ToLongDateString() + "', Evaluate='" + activeEvaluate.ToString() + "', TimeStart='" + dtCurrentTime1.ToLongTime

我写这篇文章是为了更新我的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中

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

声明已终止

这里有什么问题?
感谢

此错误表示您正试图在数据库中插入一个列长度过大的值。请查看您的数据库架构,并确定是哪个列导致了问题

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

Update语句是否需要where子句

请务必使用参数化查询,因为这将有助于抵御SQL注入攻击

Using语句在清除和清理对象时非常有用,在本例中,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();
              }
            }

您应该使用参数化查询。对于失败的记录,Commandtext是什么样子的,与表架构相比如何?正如[past][1]所说,字段不够大,无法容纳数据。[1] :检查表和输入中列的大小。另外,如果赋值的左侧参数是字符串,则不需要调用.ToString,因为它是隐式调用的。