Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通过互操作运行访问查询?_C#_Ms Access_Com_Interop - Fatal编程技术网

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)吗?将弹出一个安全警告,阻止进程继续(需要手动输入)。