C# 如何在.Net Core 3.0中获得对MS Access的引用?
我在找人帮忙。我需要弄清楚如何获取对Microsoft Access 2013的对象引用,以便(通过自动化)调用accdb中已经定义的一些函数。例如;我想自动化“RelinkODBCTables”函数的过程,该函数将链接表从.net core 3.0 c#应用程序重新指向另一个数据源。 我无法成功获取对interop的引用,但可能没有正确执行 任何帮助都将不胜感激 D-如果你想 创建访问指令 调用VBA sub(说出重新链接代码) 关闭数据库 退出访问 您可以使用以下代码:C# 如何在.Net Core 3.0中获得对MS Access的引用?,c#,.net,ms-access,.net-core,C#,.net,Ms Access,.net Core,我在找人帮忙。我需要弄清楚如何获取对Microsoft Access 2013的对象引用,以便(通过自动化)调用accdb中已经定义的一些函数。例如;我想自动化“RelinkODBCTables”函数的过程,该函数将链接表从.net core 3.0 c#应用程序重新指向另一个数据源。 我无法成功获取对interop的引用,但可能没有正确执行 任何帮助都将不胜感激 D-如果你想 创建访问指令 调用VBA sub(说出重新链接代码) 关闭数据库 退出访问 您可以使用以下代码: { object A
{
object AccessApp;
AccessApp = Interaction.CreateObject("Access.Application");
AccessApp.OpenCurrentDatabase(@"c:\test\test44.accdb");
AccessApp.Run("MyLinker");
AccessApp.CloseCurrentDatabase();
AccessApp.Quit();
}
所以,你根本不需要任何推荐。只需创建给定应用程序的一个实例(word、Excel或按照上述访问)
此时,您已经充分利用了对象模型,并且可以使用run调用一些VBA例程。在上面,我们将VBA子系统称为MyRelinker
这里唯一需要注意的是,当您创建该对象的实例时,应用程序的所有启动代码都将运行。因此,如果Access程序的开发人员在启动窗体和UI时启动任何提示,那么您不能“回答”该提示。因此,这项工作的好坏在很大程度上取决于应用程序在启动时的性能,并且调用任何VBA例程都不会触发Access应用程序中的某种提示。如果是这样,那么您就有麻烦了,因为您无法“回答”access可能会向最终用户抛出的任何表单或代码提示
而且,如果您确实希望在编码过程中获得某种“inteli感觉”,那么您可以为项目添加一个office“interop”引用。这不是必需的,但如果您对Access VBA+对象模型不是很熟练,那么在CreateObject(“Access.Application”)的位置,如果您确实参考了office组件,请说:
Microsoft.Office.Interop.Access
C:\Program Files (x86)\Microsoft Visual Studio 12.0\
Visual Studio Tools for Office\PIA\Office14\
Microsoft.Office.Interop.Access.dll
然后你的代码变成这样:
{
Microsoft.Office.Interop.Access.Application AccessApp =
new Microsoft.Office.Interop.Access.Application();
AccessApp.OpenCurrentDatabase(@"c:\test\test44.accdb");
AccessApp.Run("MyLinker");
AccessApp.CloseCurrentDatabase();
AccessApp.Quit();
}
然而,当您通过引用获得更强的类型时,您通常会将代码“绑定”到给定版本的Access,并且简单地使用CreateObject()很大程度上意味着您可以创建目标计算机上安装的任何Access的实例,它应该可以一直追溯到office 2000,这是一个长达20年的“覆盖期”
请记住,您不能创建Access运行时的实例,目标计算机将需要完整版本才能“创建”Access.Application对象的实例
您“可以”自动化运行时版本。这包括启动Access运行时(通过Shell()),然后用“GetObject()”代替CreateObject()获取实例
编辑
我应该指出,在上面的第二个代码示例中,使用office interop程序集引用,我选择了office 14,即office 2010。在您的情况下,您必须使用office 15(2013)