插入语句 C# OleDb 中的语法错误

Posted

技术标签:

【中文标题】插入语句 C# OleDb 中的语法错误【英文标题】:Syntax Error in Insert Into Statement C# OleDb 【发布时间】:2015-07-19 13:44:59 【问题描述】:

我正在使用 C# OleDb 创建一个订单表单,但在尝试将订单表单中组合框中的尺寸值放入数据库时​​遇到问题。 导致问题的代码如下。

 private void btn_Save_Click(object sender, EventArgs e)
    
        try
        
            connection.Open();
            OleDbCommand command = new OleDbCommand();
            command.Connection = connection;
            command.CommandText = "insert into OrderForm(Size) values ('" + sizeBox.Text + "')";
            command.ExecuteNonQuery();
            MessageBox.Show("Order Inserted into Database");
            connection.Close();
        
        catch (Exception ex)
        
            MessageBox.Show("Error " + ex);
        
    

这是导致我出现问题的唯一一段代码,我已将其与我已注释掉的其他 commandText 代码行进行了比较,以确保语法正确且对我来说看起来没问题。我还检查了以确保 commandText 代码中列出的字段名称和实际数据库中的字段正确无误。对此问题的任何帮助将不胜感激。干杯

编辑:代码给我的语法错误

【问题讨论】:

会不会是 Size 是数字类型(例如整数)?如果是这样 - 您的查询中不需要单引号 Size的数据类型是什么,sizeBox.Text的值是什么? 也永远不要像你刚才那样连接查询,因为你很容易受到SQL injection attack 异常信息是什么? command.CommandText 是什么? 另外,请理解如果您的ExecuteNonQuery 抛出异常,您的连接将保持打开状态。考虑将其移至finally 块或使用using 语句 【参考方案1】:

SIZE 是保留字。除非将其括在方括号中,否则不能将其用作字段名称,因此您的代码应编写为

private void btn_Save_Click(object sender, EventArgs e)

    try
    
        string sqlText = "insert into OrderForm([Size]) values (?)";
        using(OleDbConnection connection = new OleDbConnection(.....))
        using(OleDbCommand command = new OleDbCommand(sqlText, connection))
        
            connection.Open();
            command.Parameters.Add("@p1", OleDbType.VarWChar).Value = sizeBox.Text;
            int rowsAdded = command.ExecuteNonQuery();
            if(rowsAdded > 0) 
                MessageBox.Show("Order Inserted into Database");
            else
                MessageBox.Show("No Order added to the Database");
        
    
    catch (Exception ex)
    
        MessageBox.Show("Error " + ex.Message);
    

将 SIZE 括在方括号中的一部分,我改变了一些东西。

首先每次访问数据库时,您都会在连接和其他一次性对象周围使用 using 语句。这样可以避免在不需要时发生内存泄漏和昂贵的资源利用。

第二查询是参数化的,这样可以更清楚你在做什么,避免sql注入和正确解析值的问题。

【讨论】:

以上是关于插入语句 C# OleDb 中的语法错误的主要内容,如果未能解决你的问题,请参考以下文章

C# - INSERT INTO 语句中的语法错误(System.Data.dll 中发生“System.Data.OleDb.OleDbException”类型的未处理异常)

插入语句中的 OleDbException 语法错误

查询表达式中的语法错误(缺少运算符),Oledb UPDATE 语句

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

使用此 INSERT INTO 语句和 .NET OleDb 命名空间时如何解决语法错误?

ORA-01008 错误 - 使用 OleDb 将记录插入 Oracle DB