消息 7303,级别 16,状态 1,第 9 行 无法初始化链接服务器“(null)”的 OLE DB 访问接口“MSDASQL”的数据源对象。

本文详细解析了在SQL Server 2005环境下,利用OpenRowSet和OpenDataSource函数及链接服务器查询Excel时常见的错误与解决策略。针对不同错误代码如7399、7303等,提供了具体的SQL语句修正方案,强调了office版本、SQL Server版本及驱动的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SELECT * 
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0', 
'Data Source="e:\ceshi.xls";User ID=Admin;Password=Extended properties=Excel 5.0')...[sheet1$]

消息 7399,级别 16,状态 1,第 1 行
链接服务器 “(null)” 的 OLE DB 访问接口 “Microsoft.Jet.OLEDB.4.0” 报错。身份验证失败。
消息 7303,级别 16,状态 1,第 1 行
无法初始化链接服务器 “(null)” 的 OLE DB 访问接口 “Microsoft.Jet.OLEDB.4.0” 的数据源对象。
在sql2005查询分析器中读取excel时遇到的几个问题,收集了网上所有资源,最后问题终于解决了,网上很多答案都是粘贴、复制形式的,所以在实际的环境中并不能用,相信有很多朋友和我遇到过一样的错误,为了避免后人犯同样的错误,现总结分享给大家:
环境:
系统: windows7,
数据库: sqlserver2005,
office: office2003

SQL读取Excel常用的方式有:
A.通过使用 OpenRowSet 和 OpenDataSource 函数
B.通过使用链接服务器查询 Excel

select * from OpenRowSet
         ('Microsoft.Jet.OLEDB.4.0',
          'Excel 8.0;HDR=Yes;IMEX=1;Database=E:\bb.xls',
           [Sheet1$]
          )

一般报错:
消息 7399,级别 16,状态 1,第 1 行
链接服务器 “(null)” 的 OLE DB 访问接口 “Microsoft.Jet.OLEDB.4.0” 报错。提供程序未给出有关错误的任何信息。
消息 7303,级别 16,状态 1,第 1 行
无法初始化链接服务器 “(null)” 的 OLE DB 访问接口 “Microsoft.Jet.OLEDB.4.0” 的数据源对象。

select * from OpenDataSource
         ('Microsoft.Jet.OLEDB.4.0',
          'Data Source=E:\bb.xls;Extended Properties="Excel 8.0;HDR=Yes;IMEX=1"'
          )...[Sheet1$]  

一般报错:
消息 7399,级别 16,状态 1,第 1 行
链接服务器 “(null)” 的 OLE DB 访问接口 “Microsoft.Jet.OLEDB.4.0” 报错。提供程序未给出有关错误的任何信息。
消息 7303,级别 16,状态 1,第 1 行
无法初始化链接服务器 “(null)” 的 OLE DB 访问接口 “Microsoft.Jet.OLEDB.4.0” 的数据源对象。

SELECT * FROM OpenDataSource(
                              'Microsoft.Jet.OLEDB.4.0',
                              'Data Source=E:\bb.xls;User ID=Admin;Password=;Extended properties=Excel 5.0'
                            )...[Sheet1$]

一般报错:
消息 7308,级别 16,状态 1,第 1 行
因为 OLE DB 访问接口 ‘Microsoft.Jet.OLEDB.4.0’ 配置为在单线程单元模式下运行,所以该访问接口无法用于分布式查询。

declare @rc int
declare @server nvarchar(128)
declare @srvproduct nvarchar(128)
declare @provider nvarchar(128)
declare @datasrc nvarchar(4000)
declare @location nvarchar(4000)
declare @provstr nvarchar(4000)
declare @catalog nvarchar(128)

set @server = 'exceltosql'
set @srvproduct = 'excel'
set @provider = 'microsoft.jet.oledb.4.0'
set @datasrc = 'e:\bb.xls'
set @provstr = 'excel 8.0'
exec @rc = [master].[dbo].[sp_addlinkedserver] @server, @srvproduct, @provider,
@datasrc, @location, @provstr, @catalog

查询:
select * from exceltosql...sheet1$

报错:
链接服务器"exceltosql"的 OLE DB 访问接口 “microsoft.jet.oledb.4.0” 返回了消息 “无法启动应用程序。工作组信息文件丢失,或是已被其它用户以独占方式打开。”。
消息 7399,级别 16,状态 1,第 1 行
链接服务器 “exceltosql” 的 OLE DB 访问接口 “microsoft.jet.oledb.4.0” 报错。身份验证失败。
消息 7303,级别 16,状态 1,第 1 行
无法初始化链接服务器 “exceltosql” 的 OLE DB 访问接口 “microsoft.jet.oledb.4.0” 的数据源对象。
下面总结解决方式:
1、在SQL Server 外围应用配置器中启用 OpenRowSet 和 OpenDataSource函数
2、执行以上sql语句的数据库必须是本地数据库,如果为远程的数据库就会报上面的错误
3、链接字符串 Extended Properties属性的内容要以分号间隔并用双引号括起来,sheet1$ 在括号外
4、注意office的版本4.0是office2003,12.0是office2007的版本,看看是否装了驱动。
5、最为关键的是要看sql server 版本号,是32位的还是64位的。x64位的sql server很多的office的驱动是不支持的。
所以如果搞不成的话,不妨放到32位的sqlserver ,会有不少的收获
原博客地址:http://wep2008.blogbus.com/logs/35390970.html
64位下OPENROWSET运行出现错误
在SSMS中执行:

SELECT CustomerID, CompanyName
   FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
      'D:\nwind.mdb';
      'admin';'',Customers)

消息7308,级别16,状态1,第1 行
因为OLE DB 访问接口’Microsoft.Jet.OLEDB.4.0’ 配置为在单线程单元模式下运行,所以该访问接口无法用于分布式查询。
我的环境SQL Server 2008(64位)+windows2008r2(64位)
解决办法:
http://social.msdn.microsoft.com/Forums/en/vbgeneral/thread/58c4c61e-fa86-4809-bf7d-21bacb055d3e/
下载最新的驱动
原因是:在64SQL Engine中已经不提供jet.oledb.4.0的驱动了
解决方法:下载一个ACE.Oledb.12.0 for X64位的驱动,并把连接字符串Microsoft.jet.Oledb.4.0 更改为 Microsoft.ACE.OLEDB.12.0

### 如何在 SQL Server 中正确配置链接服务器以连接 MySQL 数据库 要在 SQL Server 中成功配置链接服务器以连接到 MySQL 数据库,需按照以下方法操作并注意相关细节。 #### 1. 创建链接服务器 通过 `sp_addlinkedserver` 存储过程来定义一个新的链接服务器。此存储过程允许指定目标数据库的驱动程序以及其访问路径。以下是具体的命令: ```sql EXEC sp_addlinkedserver @server = N'MYSQL_SERVER_NAME', -- 替换为实际的链接服务器名称 @srvproduct=N'MySQL', -- 远程数据源的产品名 @provider=N'MSDASQL', -- 使用 OLE DB 提供者 MSDASQL (ODBC Driver Manager) @datasrc=N'mysql_odbc_dsn'; -- 已经创建好的 ODBC 数据源名称 (DSN) ``` 上述语句中的参数解释如下: - **@server**: 定义本地实例用于识别远程或外部数据源的逻辑名称。 - **@srvproduct**: 描述远程产品的名称,在这里是 MySQL[^1]。 - **@provider**: 指定提供者的名称,这里使用的是 Microsoft 的 OLE DB Provider for ODBC Drivers (`MSDASQL`)。 - **@datasrc**: 表示已建立的 ODBC 数据源名称(DSN),它包含了指向 MySQL 实例的具体信息[^2]。 #### 2. 设置登录凭据 为了使 SQL Server 能够安全地访问 MySQL 数据库,还需要配置相应的登录认证信息。这一步骤涉及另一个系统存储过程——`sp_addlinkedsrvlogin`: ```sql EXEC sp_addlinkedsrvlogin @rmtsrvname = N'MYSQL_SERVER_NAME', -- 对应于之前创建的链接服务器名称 @useself = 'FALSE', -- 是否使用当前用户的上下文,默认否 @locallogin = NULL, -- 如果不映射特定用户,则设为空 @rmtuser = N'your_mysql_username', -- 替换为目标 MySQL 用户账户 @rmtpassword = N'your_mysql_password'; -- 替换为目标 MySQL 密码 ``` 这里的重点在于确保所提供的用户名和密码具有足够的权限去查询或者修改目标 MySQL 数据库的内容。 #### 3. 测试链接服务器功能 完成以上两步之后,可以通过执简单的 SELECT 查询测试新配置的链接服务器是否正常工作: ```sql SELECT * FROM OPENQUERY(MYSQL_SERVER_NAME, 'SELECT * FROM mysql_database.mysql_table'); ``` 其中,`OPENQUERY()` 函数用来向远程服务器提交 T-SQL 命令字符串,并返回结果集作为本地表处理的一部分。 --- ### 注意事项 - 确认已经安装适用于 Windows 平台上的 MySQL Connector/ODBC 驱动程序,并且完成了 DSN 的注册与验证。 - 若遇到错误提示关于类加载失败的情况,可能是因为缺少 JDBC 驱动支持;此时可尝试引入 Java 层面的支持代码片段 Class.forName() 来显式初始化所需的驱动器[^3]。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值