首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

读Excel数据时报错,该如何解决

2012-03-27 
读Excel数据时报错环境是:xp 个人版 sp3数据库:Microsoft SQL Server 2005 - 9.00.4035.00 (Intel X86)Nov

读Excel数据时报错
环境是:xp 个人版 sp3
数据库:Microsoft SQL Server 2005 - 9.00.4035.00 (Intel X86) Nov 24 2008 13:01:59 Copyright (c) 1988-2005 Microsoft Corporation Standard Edition on Windows NT 5.1 (Build 2600: Service Pack 3) 

现象:通过下面语句读取Excel文件时,报错了

SQL code
SP_CONFIGURE 'show advanced options',1GORECONFIGUREGOSP_CONFIGURE 'Ad Hoc Distributed Queries',1GORECONFIGUREGOselect * from OPENROWSET(N'MICROSOFT.JET.OLEDB.4.0','Excel 8.0;HDR=YES;DATABASE=D:\abc\2012.xls',Sheet1$)exec sp_configure 'Ad Hoc Distributed Queries',0GOreconfigureGOSP_CONFIGURE 'show advanced options',0GORECONFIGUREGO

错误描述:
Msg 7399, Level 16, State 1, Line 2
The OLE DB provider "MICROSOFT.JET.OLEDB.4.0" for linked server "(null)" reported an error. The provider did not give any information about the error.
Msg 7303, Level 16, State 1, Line 2
Cannot initialize the data source object of OLE DB provider "MICROSOFT.JET.OLEDB.4.0" for linked server "(null)".

翻译成中文大概就是:
链接服务器"(null)"的 OLE DB 访问接口 "Microsoft.Jet.OLEDB.4.0" 返回了消息 "未指定的错误"。
------------------------------------------------------------------------
谁能帮个忙哦,是什么原因,外围配置的启用OPENROWSER和OPENDATASOURCE支持是开启的。Excel文件的安全配置也赋予了EveryOne的读写权限。

[解决办法]
SQL code
使用sql语句读取access和excel数据/mssql与access excel互导2011年12月30日 星期五 9:44通过此方法可以实现express版本从access或excel导入数据到sql中读取accessSELECT  * FROM   OPENROWSET( 'Microsoft.Jet.OLEDB.4.0',  'D:\nongfuitcom.mdb'; 'Admin'; 'access密码', accessTableName)  access密码改为你的access密码 Admin为你的access用户名 一般为admin, accessTableName为access的表名 (注意复制后要把多余的空格去掉)导入数据库INSERT INTO dt_articletableName(ClassId,Title,Keyword,Tags,[Content])SELECT  classId,标题,关键词,tags,内容 FROM   OPENROWSET( 'Microsoft.Jet.OLEDB.4.0',  'D:\test.mdb'; 'Admin'; '', CONTENT)读取ExcelSELECT * FROM OPENROWSET( 'MICROSOFT.JET.OLEDB.4.0','Excel 8.0;IMEX=1;HDR=YES;DATABASE=D:\nongfuitcom.xls',[sheet1$]) MSSQL导出到access insert into  OPENROWSET('Microsoft.Jet.OLEDB.4.0','D:\nongfuitcom.mdb';'admin';'', dt_tbname)  select  id, title   from  dbo.dt_sqltbname  注意:若执行过程中出现SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATEMENT'OpenRowset/OpenDatasource' 的访问,因为此组件已作为此服务器安全配置的一部分而被关闭。系统管理员可以通过使用 sp_configure 启用 'Ad Hoc Distributed Queries'。有关启用 'Ad Hoc Distributed Queries' 的详细信息,请参阅 SQL Server 联机丛书中的 "外围应用配置器"。的错误,解决方法如下:启用Ad Hoc Distributed Queries:exec sp_configure 'show advanced options',1reconfigureexec sp_configure 'Ad Hoc Distributed Queries',1reconfigure使用完成后,关闭Ad Hoc Distributed Queries:exec sp_configure 'Ad Hoc Distributed Queries',0reconfigureexec sp_configure 'show advanced options',0reconfigure   *******************网络收集*******************************************Transact-SQL语句(查询分析器)进行导入导出:1、在SQL SERVER里查询access数据: 引用内容Select * FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0','Data Source="c:\DB.mdb";User ID=Admin;Password=')...表名其中c:\DB.mdb,为access数据库的路径;表名,改为你要查询的表的名字。其他默认不变。2、将access导入SQL server:Select * INTOnewtable FROM OPENDATASOURCE ('Microsoft.Jet.OLEDB.4.0','Data Source="c:\DB.mdb";User ID=Admin;Password=' )...表名3、将SQL SERVER表里的数据插入到Access表中:insert into OpenDataSource( 'Microsoft.Jet.OLEDB.4.0','Data Source=" c:\DB.mdb";User ID=Admin;Password=')...表名 (列名1,列名2) select 列名1,列名2  from  sql表OPENROWSET: Insert INTO OPENROWSET('Microsoft.Jet.OLEDB.4.0', 'c:\trade.mdb'; 'admin'; '', 表名) Select * FROM sqltablename示例:insert into  OPENROWSET('Microsoft.Jet.OLEDB.4.0','C:\db.mdb';'admin';'', Test) select id,name from Test二、SQL SERVER 和EXCEL的数据导入导出1、SQL SERVER 和EXCEL的数据导入导出Select * FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0','Data Source="c:\book1.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...[Sheet1$]下面是个查询的示例,它通过用于 Jet 的 OLE DB 提供程序查询 Excel 电子表格。Select * FROM OpenDataSource ( 'Microsoft.Jet.OLEDB.4.0','Data Source="c:\Finance\account.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...xactions2、将Excel的数据导入SQL server :Select * into newtable FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0','Data Source="c:\book1.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...[Sheet1$]实例:Select * into newtable FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0','Data Source="c:\Finance\account.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...xactions3、将SQL SERVER中查询到的数据导成一个Excel文件:T-SQL代码:EXEC master..xp_cmdshell 'bcp 库名.dbo.表名out c:\Temp.xls -c -q -S"servername" -U"sa" -P""'参数:S 是SQL服务器名;U是用户;P是密码说明:还可以导出文本文件等多种格式实例:EXEC master..xp_cmdshell 'bcp saletesttmp.dbo.CusAccount out c:\temp1.xls -c -q -S"pmserver" -U"sa" -P"sa"'EXEC master..xp_cmdshell 'bcp "Select au_fname, au_lname FROM pubs..authors orDER BY au_lname" queryout C:\ authors.xls -c -Sservername -Usa -Ppassword'4、在SQL SERVER里往Excel插入数据::insert into OpenDataSource( 'Microsoft.Jet.OLEDB.4.0','Data Source="c:\Temp.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...table1 (A1,A2,A3) values (1,2,3)T-SQL代码:Insert INTO OPENDATASOURCE('Microsoft.JET.OLEDB.4.0','Extended Properties=Excel 8.0;Data source=C:\training\inventur.xls')...[Filiale1$]  (bestand, produkt) VALUES (20, 'Test')在VB6中应用ADO导出EXCEL文件代码:Dim cn  As New ADODB.Connectioncn.open "Driver={SQL Server};Server=WEBSVR;DataBase=WebMis;UID=sa;WD=123;"cn.execute "master..xp_cmdshell 'bcp "Select col1, col2 FROM 库名.dbo.表名" queryout E:\DT.xls -c -Sservername -Usa -Ppassword'" 


[解决办法]
EXCEL表格中 内容格式是否错误,对应数据库中的列名是否正确
[解决办法]
1、文件是不是加密码了
2、xls要关闭,不能打开
3、是否允许OPENROWSET支持

如果2005,到sql server 外围应用服务器 ---功能外围应用配置 --找到即席运程查询 --
启用openrowset 及opendatasourse
[解决办法]

SQL code
SQL SERVER 2008  环境 用这个 SELECT * FROM OPENROWSET( 'MICROSOFT.ace.oledb.12.0','Excel 8.0;IMEX=1;HDR=YES;DATABASE=E:\2232.xls',[查询$])没有问题用 “MICROSOFT.JET.OLEDB.4.0” 这个 我这边也有问题一直没有找问题所在。
[解决办法]
如果 服务器对象---> 链接服务器--->下没有 “MICROSOFT.JET.OLEDB.4.0” 或“MICROSOFT.ace.oledb.12.0” 到官方 下载AccessDatabaseEngine (32位或64位的),然后安装。再调用

热点排行