【问题标题】:'Microsoft.ACE.OLEDB.12.0' 64x Sql Server and 86x Office?'Microsoft.ACE.OLEDB.12.0' 64x Sql Server 和 86x Office?
【发布时间】:2011-02-23 08:38:53
【问题描述】:

错误:

OLE DB 提供程序“Microsoft.ACE.OLEDB.12.0”不能用于分布式查询,因为该提供程序配置为在单线程单元模式下运行。

我看到的答案是 64 位 Sql Server 和 32 位 Office 之间的冲突。有没有办法将 Excel 上的 openrowset 运行到 Sql Server 中?

insert into dbo.FiscalCalendar 
select * from 
openrowset('Microsoft.ACE.OLEDB.12.0',
'Excel 12.0 Xml;Database=C:\Users\uname\Desktop\fy11.xlsx;',
'Select * from [Sheet1]')

【问题讨论】:

    标签: 64-bit oledb 32-bit openrowset


    【解决方案1】:

    情况:安装了 SQL Server 2014 (x64/64bit) 的 Windows 7 (x64/64bit) 上的 MS Office 2010 (x86/32bit)

    我们的解决方案:

    1. 在 SQL Server 运行时停止并关闭任何打开的 MS Office 程序

    2. 下载 MS Access 数据库引擎 2010 可再发行版本为 x64/64 位版本:https://www.microsoft.com/de-de/download/details.aspx?id=13255

    3. 以管理员权限打开windows命令shell(开始-执行-“cmd”)并执行下载的安装文件如下: AccessDatabaseEngine_X64.exe /passive

    4. 启动 regedit 并转到以下键:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\14.0\Common\FilesPath。将值mso.dll 重命名为mso.dll.rename

    5. 我们还需要为存储我们要导入的 XLSX 文件的文件夹授予所有人的完全权限(不要在多用户计算机或共享文件夹上执行此操作)。

    6. 打开 windows 系统控制。转到管理工具、服务并打开 MS SQL Server 服务的属性。在“登录”下选择“本地系统帐户”。保存并重新启动 MS SQL Server。

    7. 打开 SQL Server Management Studio,连接到您的 MS SQL Server 实例并运行以下 T-SQL 语句:

      EXEC sp_configure 'show advanced options', 1
      RECONFIGURE
      GO
      EXEC sp_configure 'ad hoc distributed queries', 1
      RECONFIGURE
      GO
      EXEC sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 1
      GO
      EXEC sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'DynamicParameters', 1
      GO
      
    8. 检查以下 T-SQL 语句:

      SELECT * FROM OPENROWSET( 'Microsoft.ACE.OLEDB.12.0', 'Excel 12.0;HDR=YES;Database=C:\YourFolder\File.xlsx', 'SELECT * FROM [Sheet1$]');
      

    【讨论】:

      【解决方案2】:

      我安装了 Microsoft Access Database Engine 2010 Redistributable 64 位,但没有成功。我正在运行 W7 64 位、Office 2010 和 SQL 2008 R2。

      导入/导出向导准备了包,但是当我选择保存包并执行它时,它执行得很好。当我在 MS VS 2008 上打开包时,它给了我错误。 安装 Access Database Engine 2010 并没有解决问题。我试了 2007 年的,效果很好。

      围棋数字。

      【讨论】:

      【解决方案3】:

      我遇到了同样的问题,我唯一能做的就是一个 SSIS 数据源组件,您可以在其中将其作为工作流的一部分使用

      【讨论】:

        【解决方案4】:

        ...关键是使用 /passive 标志安装 64 位 Access 引擎:

        c:>AccessDatabaseEngine_64 /passive

        【讨论】:

        • 我不知道被动标志会做什么,直到在安装 Office 32 位时遇到安装 64 位驱动程序的问题。没有被动标志,安装失败。
        【解决方案5】:

        看起来微软还没有提出解决方案。 check Microsoft feedback form of products

        他们有一些解决方法,比如使用 SSIS

        【讨论】:

          【解决方案6】:

          您必须先安装 Microsoft Access Database Engine 2010 Redistributable 64 位,您可以download from here

          假设您的 Excel 文件为:E:\Sample.xls,您的 Excel 工作表名称为:Sheet1

          运行以下命令从 Excel 文件中获取数据:

          SELECT * FROM OPENDATASOURCE( 'Microsoft.ACE.OLEDB.12.0', 'Data Source="E:\Sample.xls";
          Extended properties=Excel 8.0')...Sheet1$
          

          上述查询在安装了 SQL Server 2005 64 位和 SQL Server 2008 R2 64 位的 Windows Server 2008 64 位上运行。

          关键是要指定 64 位提供程序 'Microsoft.ACE.OLEDB.12.0' 而不是仅 32 位的 Jet 引擎。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2011-03-30
            • 2015-03-13
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-07-24
            • 1970-01-01
            相关资源
            最近更新 更多