尝试执行 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”类型的未处理异常)