Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.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# 如何在.Net Core 3.0中获得对MS Access的引用?_C#_.net_Ms Access_.net Core - Fatal编程技术网

C# 如何在.Net Core 3.0中获得对MS Access的引用?

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

我在找人帮忙。我需要弄清楚如何获取对Microsoft Access 2013的对象引用,以便(通过自动化)调用accdb中已经定义的一些函数。例如;我想自动化“RelinkODBCTables”函数的过程,该函数将链接表从.net core 3.0 c#应用程序重新指向另一个数据源。 我无法成功获取对interop的引用,但可能没有正确执行

任何帮助都将不胜感激

D-

如果你想

创建访问指令

调用VBA sub(说出重新链接代码)

关闭数据库

退出访问

您可以使用以下代码:

{
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)