我写了这个来更新我的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
中附加信息:字符串或二进制数据将被截断。
声明已经终止。
这是什么问题? 感谢
答案 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();
}
}