【问题标题】:How to find which OLE provider is available for SQL Server?如何查找可用于 SQL Server 的 OLE 提供程序?
【发布时间】:2013-03-15 14:19:44
【问题描述】:

我尝试在 SSMS 中访问 Excel 文件。在互联网上搜索后,我无法让它工作。
这是我所做的:

我的环境:

Windows 7(64bit) SP 1, 
Microsoft SQL Server 2008 (SP3) - 10.0.5500.0 (X64)   
Office 2010 Pro Plus with Access installed(32 bit)
  1. 尝试更改 OLE 的配置,例如:

    exec sp_configure 'Advanced', 1
    RECONFIGURE
    
    exec sp_configure 'Ad Hoc Distributed Queries', 1
    RECONFIGURE
    
    EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 1  
    EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'DynamicParameters', 1
    
  2. 运行查询:

    SELECT * FROM OPENROWSET('MICROSOFT.ACE.OLEDB.12.0','Text;Database=C:\Temp\;','SELECT * FROM [test.csv]')
    

    SELECT * FROM OPENROWSET('MICROSOFT.JET.OLEDB.4.0','Text;Database=C:\Temp\;','SELECT * FROM [test.csv]')
    

对于这两种情况,我都收到如下错误消息:

Msg 7308, Level 16, State 1, Line 1
OLE DB provider 'MICROSOFT.JET.OLEDB.4.0' cannot be used for distributed queries because the provider is configured to run in single-threaded apartment mode.

Msg 7308, Level 16, State 1, Line 1
OLE DB provider 'MICROSOFT.ACE.OLEDB.12.0' cannot be used for distributed queries because the provider is configured to run in single-threaded apartment mode.

然后我在SQL server上查看了链接服务器,运行系统sp默认有10个provider:

EXEC master.dbo.sp_MSset_oledb_prop 

SQLOLEDB
MSOLAP
SQLNCLI11
ADsDSOObject
SQLNCLI
SQLNCLI10
Search.CollatorDSO
MSDASQL
MSDAOSP
MSIDXS

如何解决这个问题? 我如何知道 MICROSOFT.ACE.OLEDB.12.0MICROSOFT.JET.OLEDB.4.0 是否适用于 SQL Server?

【问题讨论】:

  • OLE DB 4.0 与 64 位不兼容。您使用的是哪个版本的 AccessDatabaseEngine?
  • 我使用的是 Office 2010 32 位。然后我更改为 Office 2010 64 位,它似乎适用于 excel xls 文件,例如: select * from OPENROWSET('Microsoft.ACE.OLEDB.12.0', 'Excel 8.0;Database=C:\Temp\Test.xls;', '选择 * 从 [Location1$]')。但它不适用于 excel xlsx 文件,例如: select * from OPENROWSET('Microsoft.ACE.OLEDB.12.0', 'Excel 9.0;Database=C:\Temp\Test.xlsx;', 'SELECT * FROM [Location1$] ')。如何使其与 xsls 文件一起使用?在这种情况下,OpenRowSet 的正确语法是什么?

标签: sql sql-server-2008 tsql oledb linked-server


【解决方案1】:

对于扩展名为 .xlsx 的文件类型,请使用“Excel 12.0”或“Excel 12.0 Xml”而不是 Excel 9.0

SELECT *
FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0;Database=C:\Temp\Test.xlsx;', 'SELECT * FROM [Location1$]')

如果您要连接到 Microsoft Office Excel 数据,请根据 Excel 文件类型添加适当的 OLEDB 连接字符串的扩展属性:

File Type (extension)                               Extended Properties
---------------------------------------------------------------------------------
Excel 97-2003 Workbook (.xls)                       "Excel 8.0"
Excel 2007-2010 Workbook (.xlsx)                    "Excel 12.0 Xml"
Excel 2007-2010 Macro-enabled workbook (.xlsm)      "Excel 12.0 Macro"
Excel 2007-2010 Non-XML binary workbook (.xlsb)     "Excel 12.0"

【讨论】:

  • 不适用于我的案例,同样的问题。您还有其他解决方案吗?
  • @Luv 你能澄清一下吗?错误,你的供应商等等
  • 在 google 上搜索 2 小时左右。错误 消息 7308,级别 16,状态 1,第 39 行 OLE DB 提供程序“Microsoft.ACE.OLEDB.12.0”不能用于分布式查询,因为提供程序配置为在单线程单元模式下运行。
  • @Luv SQLServer(32 位或 64 位)和 Microsoft Access Database Engine 2010(32 位或 64 位)有哪些版本?
  • SQL server 64 位和 Microsoft Access 数据库引擎 2010 64 位
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-03-15
  • 1970-01-01
  • 1970-01-01
  • 2016-11-03
  • 1970-01-01
  • 2011-03-13
  • 1970-01-01
相关资源
最近更新 更多