C# 通过互操作运行访问查询?
我在几个C# 通过互操作运行访问查询?,c#,ms-access,com,interop,C#,Ms Access,Com,Interop,我在几个*.mdb文件中有几个MS Access查询。它们相当复杂。 因此,我只想打开一个文件,运行其中包含的特定查询,然后返回结果表。 我该怎么做? (我知道我们可以通过连接字符串等进行连接,但我想探索这种方法。) 我的示例代码(编辑以禁用安全警报): using Microsoft.Office.Interop.Access; using Microsoft.Office.Core; var app = new Application(); app.OpenCurrentDatabase
*.mdb
文件中有几个MS Access查询。它们相当复杂。因此,我只想打开一个文件,运行其中包含的特定查询,然后返回结果表。
我该怎么做? (我知道我们可以通过连接字符串等进行连接,但我想探索这种方法。)
我的示例代码(编辑以禁用安全警报):
using Microsoft.Office.Interop.Access;
using Microsoft.Office.Core;
var app = new Application();
app.OpenCurrentDatabase(@"C:\test.mdb", true);
app.AutomationSecurity = MsoAutomationSecurity.msoAutomationSecurityLow;
app.Visible = false;
// run query
app.Quit();
select date(), date()-1
示例查询:
using Microsoft.Office.Interop.Access;
using Microsoft.Office.Core;
var app = new Application();
app.OpenCurrentDatabase(@"C:\test.mdb", true);
app.AutomationSecurity = MsoAutomationSecurity.msoAutomationSecurityLow;
app.Visible = false;
// run query
app.Quit();
select date(), date()-1
要在Microsoft Access应用程序的实例中运行查询(例如,要运行使用自定义VBA函数和其他功能的查询,这些功能可能无法用于直接System.Data.OleDb或System.Data.Odbc连接的查询),可以执行以下操作:
var accApp=new Microsoft.Office.Interop.Access.Application();
OpenCurrentDatabase(@“C:\Users\Public\Database1.accdb”);
Microsoft.Office.Interop.Access.Dao.Database cdb=accApp.CurrentDb();
Microsoft.Office.Interop.Access.Dao.Recordset rst=
cdb.OpenRecordset(
“从ClientQuery中选择全名”,
Microsoft.Office.Interop.Access.Dao.RecordsetTypeEnum.dbOpenSnapshot);
而(!rst.EOF)
{
Console.WriteLine(rst.Fields[“FullName”].Value);
rst.MoveNext();
}
rst.Close();
accApp.CloseCurrentDatabase();
accApp.Quit();
@Govert-我不得不回滚您的编辑,因为它导致编译错误:“找不到类型或命名空间名称‘Dao’(您是否缺少using指令或程序集引用?)。我发现使用Microsoft.Office.Interop.Access时,有时会产生类似的奇怪结果。对不起,我应该检查一下。这是一个狂妄自大的时刻。你知道SQL查询中的VBA函数是否有效吗?即使是通过new DBEngine()
打开数据库,而不是完全访问new Application()
。是Access.Application
对象提供了到VBA的挂钩。直接DAO连接无法“查看”VBA函数,就像直接OLEDB或ODBC连接一样。谢谢,这很有效!你能告诉我如何在后台打开它(没有任何gui)吗?将弹出一个安全警告,阻止进程继续(需要手动输入)。