尝试执行 INSERT INTO 时 OleDb 异常 0x80040e14

Posted

技术标签:

【中文标题】尝试执行 INSERT INTO 时 OleDb 异常 0x80040e14【英文标题】:OleDb exception 0x80040e14 when trying to perform INSERT INTO 【发布时间】:2021-11-22 03:36:02 【问题描述】:

我在尝试执行INSERT INTO 命令时遇到了这个异常:

这是我的代码:

private void AddQuiz_Button_Submit_Click(object sender, EventArgs e)

    // Connection when button is clicked 
    OleDbConnection myConnection = GetConnection(); 

    string myQuery = "INSERT INTO  QuestionBank (Question, Choice A, Choice B, Choice C, Choice D, Category, Correct Answer) VALUES ('" + AddQuiz_RichTextBox_Question.Text + "' , '" + OptionA_TextBox.Text + "' , '" + OptionB_TextBox.Text + "' , '" + OptionC_TextBox.Text + "' , '" + OptionD_TextBox.Text + "' , '" + AddQuiz_Category_Listbox.Text + "' , '" + AddQuiz_ListBox_Answer.Text + "')" ; //SQuery statement 

    OleDbCommand myCommand = new OleDbCommand(myQuery, myConnection);

    try
    
        // Opening connection
        myConnection.Open(); 

        AddQuiz_Label_CheckConnection.Text = "Connection Successful";
        // Execute the query 
        myCommand.ExecuteNonQuery(); 

        MessageBox.Show("Question saved");
    
    catch (Exception ex)
    
        MessageBox.Show("Exception in DBHandler" + ex); 
    
    finally
    
        // Close connection 
        myConnection.Close(); 
    

【问题讨论】:

SQL Injection alert - 您应该将您的 SQL 语句连接在一起 - 使用 参数化查询 来避免 SQL 注入 - 查看Little Bobby Tables 还有 - 您在 INSERT INTO 语句中的列名包含空格 - 所以您必须将它们括在双引号中:INSERT INTO QuestionBank (Question, "Choice A", etc.) 【参考方案1】:

我看到了 800xxxx 消息。在几乎所有情况下,这意味着您的项目在安装的 Access 版本中以错误的位大小运行。

如果您的 cpu 设置为“Any”,则需要将项目设置更改为 x86。

试试看。

所以这个设置:

然后在配置管理器中 - 为 x86 创建一个新设置

所以新的配置,然后:

将下拉菜单更改为 x86 - 是的,您可以接受默认的“从以下位置复制设置”

你现在有了这个:

然后关闭按钮 - 你现在有了这个:

当然反之亦然 - 如果您运行的是 x64 办公室,则强制项目使用 x64 并且再次不要使用“任何”。

【讨论】:

【参考方案2】:

语法错误是由您的字段名称中的 空格 引起的。在 Access SQL 中,此类名称必须用方括号括起来:

string myQuery = "INSERT INTO  QuestionBank (Question, [Choice A], [Choice B], [Choice C], [Choice D], Category, [Correct Answer]) VALUES ('" + AddQuiz_RichTextBox_Question.Text + "' , '" + OptionA_TextBox.Text + "' , '" + OptionB_TextBox.Text + "' , '" + OptionC_TextBox.Text + "' , '" + OptionD_TextBox.Text + "' , '" + AddQuiz_Category_Listbox.Text + "' , '" + AddQuiz_ListBox_Answer.Text + "')" ; //SQuery statement 

也就是说,一定要学习使用参数 - 更简洁,更容易调试。

【讨论】:

以上是关于尝试执行 INSERT INTO 时 OleDb 异常 0x80040e14的主要内容,如果未能解决你的问题,请参考以下文章

VB.Net OLEDB ExecuteNonQuery INSERT INTO - 对数据库没有影响

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

MS Access 使用 SQL INSERT INTO - SELECT FROM 插入记录

INSERT INTO 语句的语法错误。

vb sql insert into 语句语法错误 求解

有条件的 INSERT INTO MySQL - 不存在的地方