C# 执行更新命令
我写这篇文章是为了更新我的SQL表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
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,因为它是隐式调用的。