插入 ms 访问数据库

Posted

技术标签:

【中文标题】插入 ms 访问数据库【英文标题】:insert into ms access database 【发布时间】:2013-03-25 15:03:03 【问题描述】:

我使用以下代码将记录从一个数据库插入到另一个数据库,但它不起作用。我在 MS-ACCESS 2007 中尝试了查询,它工作正常,但从我的 C# 代码以编程方式调用时它不起作用?

string query_insert = "INSERT INTO Questionnaires_Table(BranchName,Factor,Region,Branch_ID,Current_Date,No_Employees) "
+ "SELECT BranchName,Factor,Region,Branch_ID,Current_Date,No_Employees "
+ "FROM Questionnaires_Table IN '" + dialog.FileName + "' Where Branch_ID = " + textBox1.Text ;

dbConnDest.Open();

OleDbDataAdapter dAdapter = new OleDbDataAdapter();
OleDbCommand cmd_insert = new OleDbCommand(query_insert, dbConnDest);

dAdapter.InsertCommand = cmd_insert;

textBox2.Text = query_insert.ToString();

dbConnDest.Close();

当我在 ms 访问中获取query_insert 的内容时,它工作正常。

【问题讨论】:

你得到什么异常?执行帐户是否有权访问外部数据库? 究竟是什么不起作用?你有例外吗? 警告您的代码容易受到 sql 注入攻击。 我没有得到任何异常 目标数据库什么也没发生 【参考方案1】:

我认为你需要使用

cmd_insert.executeNonQuery()

【讨论】:

当我尝试这样做时,在 INSERT INTO 中出现语法错误异常 这说明你的sql语法错误。在这种情况下,我会设置一些断点来确定 query_insert 的值并将其粘贴到您的 ms 访问数据库中以查看它是否有效 我明白了,然后尝试使用 textbox2.Text = cmd_insert.executeScalar() 和 HansUp 说的一样,你应该删除 SELECT 语句中的逗号 错误 1 ​​无法将类型“对象”隐式转换为“字符串”。存在显式转换(您是否缺少演员表?)【参考方案2】:

删除SELECT 列表中最后一个字段名称后面的逗号。

"SELECT BranchName,Factor,Region,Branch_ID,Current_Date,No_Employees"

【讨论】:

【参考方案3】:

dAdapter.Update(); 应该做的伎俩

【讨论】:

您创建了一个插入语句,但您没有执行它。可以在此处阅读示例:link 如果需要,可以省略 DataTable 相关代码。【参考方案4】:

这似乎很可疑:

 " Where Branch_ID = " + textBox1.Text ;

textBox1 是否包含数字 ID?输入的 ID 是否存在于源数据库中?

我会 1) 检查 ID 是否存在,如果不存在则警告用户,2) 将查询更改为使用参数而不是连接 SQL。

如果你的公司开了一个ID为

的分公司会怎样
"1; DROP TABLE Branches"

【讨论】:

我使用参数,但仍然遇到同样的问题

以上是关于插入 ms 访问数据库的主要内容,如果未能解决你的问题,请参考以下文章

记录未使用 javascript 正确插入到 ms 访问数据库中

我如何以表格形式查看 ms 访问表单中的所有插入数据

ms 访问转储到 sql 插入

Ms 访问中的数据插入问题..但代码运行良好

具有 Ms 访问权限的 C# Windows 窗体应用程序无法插入数据

如何使用 C# 仅将日期(不包括时间)插入 ms 访问数据库