使用互操作从C#代码创建Access实例

使用互操作从C#代码创建Access实例,c#,ms-access,office-interop,C#,Ms Access,Office Interop,我正在尝试从C#.net代码运行Access(Office 365)。我尝试这样做的原因是运行一个使用VBA的access查询。我的查询很复杂,我宁愿按原样称呼它,也不愿将所有内容都转换为c 我正在使用VS2015和.net4(我已经尝试了其他版本的.net,但没有效果)。我已经安装了Microsoft Visual Studio Tools for Office Runtime 2010(它说它可以与VS2015一起使用) 当我执行这一行时,我得到下面的错误 var accApp = new

我正在尝试从C#.net代码运行Access(Office 365)。我尝试这样做的原因是运行一个使用VBA的access查询。我的查询很复杂,我宁愿按原样称呼它,也不愿将所有内容都转换为c

我正在使用VS2015和.net4(我已经尝试了其他版本的.net,但没有效果)。我已经安装了Microsoft Visual Studio Tools for Office Runtime 2010(它说它可以与VS2015一起使用)

当我执行这一行时,我得到下面的错误

var accApp = new Microsoft.Office.Interop.Access.Application();
引发异常:mscorlib.dll中的“System.Runtime.InteropServices.COMException”

其他信息:检索CLSID为{73A4C9C1-D68D-11D0-98BF-00A0C90DC8D9}的组件的COM类工厂失败,原因是以下错误:80040154类未注册(HRESULT的异常:0x80040154(REGDB_E_CLASSNOTREG))

这是我csproj文件中的参考资料

<ItemGroup>
    <Reference Include="dao, Version=10.0.4504.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
      <EmbedInteropTypes>True</EmbedInteropTypes>
    </Reference>
    <Reference Include="Microsoft.Office.Interop.Access, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c, processorArchitecture=MSIL">
      <EmbedInteropTypes>True</EmbedInteropTypes>
    </Reference>
    <Reference Include="Microsoft.Office.interop.access.dao, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c, processorArchitecture=MSIL">
      <EmbedInteropTypes>True</EmbedInteropTypes>
    </Reference>
    <Reference Include="System" />
    <Reference Include="System.Core" />
    <Reference Include="System.Xml.Linq" />
    <Reference Include="System.Data.DataSetExtensions" />
    <Reference Include="Microsoft.CSharp" />
    <Reference Include="System.Data" />
    <Reference Include="System.Net.Http" />
    <Reference Include="System.Xml" />
</ItemGroup>

我只是到这个兔子洞里试着打电话问我的问题。如果有更好的方法,我愿意接受建议

您是否在运行此代码的计算机上安装了Access?您是否将应用程序编译为anyCPU?@Steve是的,我安装了32位Office365,rene我尝试了32位和64位版本,并为每个配置适当设置了目标cpu。您为什么需要使用Interop而不是OleDb?一般来说,类not registered的Win32错误意味着未安装相应的互操作运行时(甚至到版本)…您正在尝试这样做的是Winforms应用程序还是web应用程序?另外,当您安装它时,是否重新启动计算机以使注册生效?您是否在运行此代码的计算机上安装了Access?您是否将应用程序编译为anyCPU?@Steve是的,我已安装32位Office365,rene我使用尝试了32位和64位版本,并为每个配置适当地设置了目标cpu。您为什么需要使用Interop而不是OleDb?一般来说,类not registered的Win32错误意味着未安装适当的Interop运行时(甚至到版本)…这是一个Winforms应用程序还是一个web应用程序,您正在尝试这样做?另外,当您安装它时,是否重新启动计算机以使注册生效?
 var db = accApp.OpenDatabase(@"C:\mypath\mydb.mdb");
 var rs = db.QueryDefs["MyQuery"].OpenRecordset(RecordsetTypeEnum.dbOpenSnapshot);