如何修复"System.Data.OleDb.OleDbException: 'Syntax error in UPDATE statement.'"?



>我的UPDATE datagridview代码中遇到了语法错误,该错误恰好在另一个.cs文件中工作。我的小组一直在在线寻找不同的解决方案,但一切都不起作用。

我的团队一直在在线寻找不同的解决方案,但似乎一切都不起作用。

        {
            connection.Open();
            OleDbCommand cmd = connection.CreateCommand();
            cmd.CommandType = CommandType.Text;
            cmd.CommandText = "Update Table1 set treatment = '" + treat.Text + "', remarks = '" + appRemarks.Text + "', cost = '" + treatCost.Text + "', Time = '" + textBox2.Text + "' where lastName = '" + Lastname.Text + "' ";

            cmd.ExecuteNonQuery();
            connection.Close();
            MessageBox.Show("Updated Successfully!");
        }

预期的输出应该是"更新成功!",并且应该在单击"更新"按钮后反映在数据库文件中。有时输出是"Microsoft引擎数据库",不会保存更改。

错误显示"System.Data.OleDb.OleDbException: 'UPDATE 语句中的语法错误'"指向 cmd.ExecuteNonQuery((;

首先,切勿使用字符串串联来构建查询。您请求的是SQL注入攻击。我在这里能看到的最重要的事情是确保只有字符串列(varchar、char、text 等(的列才有单引号值。成本是一个数字吗?如果是这样,那么它应该是:

, cost=" + treatCost.Text + ", 

如果成本是一个数字,还要确保输入字段中没有货币金额。如果有人输入 1,422.00,这不是一个数字,并且会失败,因为 是用于装饰的。如果有人输入 1422.00 美元,这不是一个数字,因为 $ 用于装饰。其中任何一个都会使查询失败。

如果有人在备注字段中键入撇号,就会发生这种情况,SQL 服务器会将其解释为字符串的结束引号。 但是,如果用户知道一点sql并想引起麻烦,则可能会发生更糟糕的事情。 例如,在备注中加入'--将导致

Update Table1 set treatment = 'blah', remarks = ''-- where lastName = 'foobar'

这将覆盖表中的每一行,而不仅仅是包含foobar的行。

使用查询参数,以便用户提供的值不能解释为查询关键字和结构。

而不是remarks = '" + appRemarks.Text + "'您将拥有remarks = @Remarks以及

cmd.Parameters.Add("@Remarks", SqlDbType.NText).Value = appRemarks.Text;

以及所有其他用户输入。

相关内容

最新更新