从 .NET 应用程序在打开的 Access 实例中执行函数

Execute a function in an open instance of Access from a .NET application

我有一个 Access 数据库和一个 C# 应用程序。 C# 应用程序对 Access 中的某些 table 做了一些事情,我想在 C# 代码结束时刷新 Access 表单。我尝试这样做:

void refresh()
    {
Access.Application acApp = new Access.ApplicationClass();//create msaccess application

object oMissing = System.Reflection.Missing.Value;
//Run the Test macro in the module
acApp.Run("Function_refresh",ref oMissing,ref oMissing,ref oMissing,ref oMissing,
ref oMissing,ref oMissing,ref oMissing,ref oMissing,
ref oMissing,ref oMissing,ref oMissing,ref oMissing,ref oMissing
,ref oMissing,ref oMissing,ref oMissing,ref oMissing,ref oMissing
,ref oMissing,ref oMissing,ref oMissing,ref oMissing,ref oMissing
,ref oMissing,ref oMissing,ref oMissing,ref oMissing,ref oMissing
,ref oMissing,ref oMissing);
acApp.Quit();//exit application
        }

如果数据库关闭,我的代码仍然有效。如果数据库已经打开,如何使用该功能?

编辑:C# 在 Access table 中做了一些插入,所以当它结束时我想在它打开时刷新表单。

My code works, if the DB is closed. How can I use the function if the database is already open?

我刚刚为 C# Winforms 应用程序上的按钮尝试了以下代码,它对我有用。如果我在 Access 中打开了我的数据库并且在数据库中打开了表单“LogForm”,那么当我单击我的 C# 表单上的按钮时,Access 表单就会更新。

private void button1_Click(object sender, EventArgs e)
{
    Microsoft.Office.Interop.Access.Application acApp;
    this.Activate();
    acApp = (Microsoft.Office.Interop.Access.Application)System.Runtime.InteropServices.Marshal.GetActiveObject("Access.Application");
    Microsoft.Office.Interop.Access.Dao.Database cdb = acApp.CurrentDb();
    cdb.Execute("INSERT INTO LogTable (LogEntry) VALUES ('Entry added ' & Now())");
    acApp.Forms["LogForm"].Requery();
}

代码改编自微软支持文章

How to use Visual C# to automate a running instance of an Office program