数据库读取Excel数据

小弟现在在学习SQLSERVER,学到用SQLSERVER读到Excel文件中的数据,现在E盘下有一个222.xlsx文件(office2007的,文件后缀名多一个X)

读数据的脚本如下:
SQL code

SELECT * 
FROM OpenDataSource ( 'Microsoft.Jet.OLEDB.4.0',
  'Data Source="E:\222.xlsx";User ID=Admin;Password=;Extended properties=Excel 8.0')...[Sheet$]



先说一下自己的操作步骤:
1.先跑脚本如下:
SQL code

--启用Ad Hoc Distributed Queries:
exec sp_configure 'show advanced options',1
reconfigure



2.跑脚本
SQL code

SELECT * 
FROM OpenDataSource ( 'Microsoft.Jet.OLEDB.4.0',
  'Data Source="E:\222.xlsx";User ID=Admin;Password=;Extended properties=Excel 8.0')...[Sheet$]


跑完步骤2出现了错误提示
链接服务器"(null)"的 OLE DB 访问接口 "Microsoft.Jet.OLEDB.4.0" 返回了消息 "外部表不是预期的格式。"。
消息 7303,级别 16,状态 1,第 1 行
无法初始化链接服务器 "(null)" 的 OLE DB 访问接口 "Microsoft.Jet.OLEDB.4.0" 的数据源对象。

在网上查了很多东东,都只放一段脚本,运行后也基本有错误,搞了好长时间了,请各位帮忙高手解决

作者: yanhahamade   发布时间: 2011-06-16

E:\222.xlsx,这个另存为兼容excl 97-2003的格式,即文件后缀名应该是xls,而不是xlsx

作者: cd731107   发布时间: 2011-06-16

SQL code
--試試看
SELECT * 
FROM OpenDataSource ( 'Microsoft.ACE.OLEDB.12.0',
  'Data Source="E:\222.xlsx";User ID=Admin;Password=;Extended properties=Excel 12.0')...[Sheet$]


作者: playwarcraft   发布时间: 2011-06-16

换'Microsoft.ACE.OLEDB.12.0'的试试吧。

作者: zy112429   发布时间: 2011-06-16

引用 2 楼 playwarcraft 的回复:

SQL code
--試試看
SELECT *
FROM OpenDataSource ( 'Microsoft.ACE.OLEDB.12.0',
'Data Source="E:\222.xlsx";User ID=Admin;Password=;Extended properties=Excel 12.0')...[Sheet$]


运行以后,出错别外一个错误
链接服务器"(null)"的 OLE DB 访问接口 "Microsoft.ACE.OLEDB.12.0" 返回了消息 "无法启动应用程序。工作组信息文件丢失,或是已被其它用户以独占方式打开。"。

作者: yanhahamade   发布时间: 2011-06-16

引用 1 楼 cd731107 的回复:

E:\222.xlsx,这个另存为兼容excl 97-2003的格式,即文件后缀名应该是xls,而不是xlsx


按照您说的做了一遍,也出现了错误
链接服务器"(null)"的 OLE DB 访问接口 "Microsoft.Jet.OLEDB.4.0" 返回了消息 "无法启动应用程序。工作组信息文件丢失,或是已被其它用户以独占方式打开。"。
消息 7399,级别 16,状态 1,第 2 行
链接服务器 "(null)" 的 OLE DB 访问接口 "Microsoft.Jet.OLEDB.4.0" 报错。身份验证失败。
消息 7303,级别 16,状态 1,第 2 行
无法初始化链接服务器 "(null)" 的 OLE DB 访问接口 "Microsoft.Jet.OLEDB.4.0" 的数据源对象。

作者: yanhahamade   发布时间: 2011-06-16

各位有没什么方法,贴个出来让我用用也行

作者: yanhahamade   发布时间: 2011-06-16

把桌面打开的excel文件关闭了再试试。

作者: zy112429   发布时间: 2011-06-16

引用 5 楼 yanhahamade 的回复:
引用 1 楼 cd731107 的回复:

E:\222.xlsx,这个另存为兼容excl 97-2003的格式,即文件后缀名应该是xls,而不是xlsx


按照您说的做了一遍,也出现了错误
链接服务器"(null)"的 OLE DB 访问接口 "Microsoft.Jet.OLEDB.4.0" 返回了消息 "无法启动应用程序。工作组信息文件丢失,或是已被其它用户以独占方式打开。"。……

你导入的时候,这个excl是不是同时被打开了

作者: cd731107   发布时间: 2011-06-16

引用 7 楼 zy112429 的回复:

把桌面打开的excel文件关闭了再试试。

excel文件一直是关闭的。

作者: yanhahamade   发布时间: 2011-06-16

暂且试试,把sql连接的密码暂时清空,再去导入,导入完成后,再修改回密码

作者: cd731107   发布时间: 2011-06-16

当程序用ado的jet4.0方式连接mdb数据库的时候,对于设有access数据库密码的mdb的访问居然报错“无法启动应用程序,工作组信息文件丢失,或是已被其他用户已独占方式打开”。

ADOConnection.ConnectionString= "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False; Password=Psd;Data Source=filename.mdb" 
不能用Password的形式定义数据库密码,应该改成: 
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=filename.mdb ;Persist Security Info=False;Jet OLEDB:Database Password=Psd  

参考一下面的

作者: cd731107   发布时间: 2011-06-16

--excel 2007
select * from OpenRowSet('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0;HDR=Yes;IMEX=1;Database=C:\xxxx.xlsx', 'select * from [Sheet1$]')
肯定可行的...

作者: Davily   发布时间: 2011-06-16