System.Data.OleDb.OleDbException: 'UPDATE 语句中的语法错误。 '

Posted

技术标签:

【中文标题】System.Data.OleDb.OleDbException: \'UPDATE 语句中的语法错误。 \'【英文标题】:System.Data.OleDb.OleDbException: 'Syntax error in UPDATE statement. 'System.Data.OleDb.OleDbException: 'UPDATE 语句中的语法错误。 ' 【发布时间】:2020-10-26 17:40:53 【问题描述】:

我在尝试更新时收到此错误,但我无法在更新语句中找到任何问题。

str = "UPDATE BillTable SET Bill_No = @billno, Bill_Year = @billYear, Voucher_No= @voucher, Date= @date, Group_ID= @groupname, Vendor_Id= @vendorname, Amount= @amount WHERE ID= @billID";

            cmd = new OleDbCommand(str, cn);
            cmd.Parameters.Add(new OleDbParameter("@billID", Convert.ToString(inovidid)));
            cmd.Parameters.Add(new OleDbParameter("@billYear", Convert.ToString(fylabel.Text)));
            cmd.Parameters.Add(new OleDbParameter("@billno", Convert.ToString(billno.Text)));
            cmd.Parameters.Add(new OleDbParameter("@voucher", Convert.ToString(voucher.Text)));
            cmd.Parameters.Add(new OleDbParameter("@date", Convert.ToString(DateTimePicker1.Text)));
            cmd.Parameters.Add(new OleDbParameter("@groupname", Convert.ToString(groupidDB)));
            cmd.Parameters.Add(new OleDbParameter("@vendorname", Convert.ToString(vendoridDB)));
            cmd.Parameters.Add(new OleDbParameter("@amount", Convert.ToString(amount.Text)));


【问题讨论】:

你为什么要把所有东西都转换成字符串?数据库中的所有字段也是字符串吗? 我同意@Selvin,您应该保持数据类型不变,以防它与数据库字段兼容。 OleDBParameters 是定位的 - 您必须按照它们被引入的顺序添加它们。字符串转换同上 - 但为什么要转换 TextBox.Text?你认为文本是什么类型?此外,不需要 VisualStudio 标签 - 标签包含一些文本以提供使用指导 【参考方案1】:

转换为字符串以及乱序参数最终可能会导致“数据类型不匹配”错误或根本无法执行 (OleDbCommand parameters order and priority),但语法错误很可能是由于使用 Date 作为字段名引起的。日期是保留字(内在函数)。它甚至会导致 Access VBA 中的执行命令出错。重命名字段或括在 [ ] 中以定义为字段名称:[Date]=@date

【讨论】:

检查日期字段格式。执行时可能不支持

以上是关于System.Data.OleDb.OleDbException: 'UPDATE 语句中的语法错误。 '的主要内容,如果未能解决你的问题,请参考以下文章