EXEC sp_configure 'show advanced options', 1
GO
RECONFIGURE
GO
EXEC sp_configure 'Ad Hoc Distributed Queries', 1
GO
RECONFIGURE
GOinsert into awowusgamek select * from
OPENROWSET('MICROSOFT.JET.OLEDB.4.0'
,'Excel 5.0;HDR=YES;DATABASE=d:1.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" 的数据源对象。怎么导呢?

解决方案 »

  1.   

    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')...xactions
    -------------------------------------------------------------------------------------------------2、将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')...xactions
    -------------------------------------------------------------------------------------------------3、将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'
    在VB6中应用ADO导出EXCEL文件代码: 
    Dim cn  As New ADODB.Connection
    cn.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'"
    ------------------------------------------------------------------------------------------------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')  
      

  2.   

     你是不是驱动不对?下载个MDAC 2.8装上
      

  3.   


    --office2007
    insert into awowusgamek select * FROM  OPENDATASOURCE('Microsoft.ACE.OLEDB.12.0','Data Source="d:\1.xls";User ID=admin;Password=;Extended properties=Excel 5.0')...[sheet1$]
      

  4.   

    d:1.xls
    这个要在数据库服务器电脑上
      

  5.   

    SELECT * 
    FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
      'Data Source="c:\Finance\account.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...[SHEET1$]这样试试,修改一下路径
      

  6.   

    没有,我找到原因了,我的EXCEL是打开状态 - -!
    但是现在报错插入错误: 列名或所提供值的数目与表定义不匹配。
    那个表就3了列,id主键 其他2列字符型 我excel就3列数据,然后报这个错?难道要在excel里指定列名?
      

  7.   

    select * from
    OPENROWSET('MICROSOFT.JET.OLEDB.4.0'
    ,'Excel 5.0;HDR=YES;DATABASE=d:1.xls',sheet1$)先看一下结果。
    估计还有第四个字段。(空字段)
      

  8.   

     我就是数据现在在EXCEL里,然后我的表就是刚建立的,里面还没有数据,我就是要把EXCEL的3列数据导入进这个表
      

  9.   

    是不是要在我EXCEL里指定表的列名?
    我EXCEL里就是3列数据
      

  10.   


    你是说我EXCEL里?
    我表就3个字段,我刚建立的
    而且我手动插入一条数据测试了的。就复制EXCEL里的第一行数据插入的。
    但是用上述SQL语句导入就报
    插入错误: 列名或所提供值的数目与表定义不匹配。 
      

  11.   


    SELECT * 
    FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
      'Data Source="c:\Finance\account.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...[SHEET1$]先查询看结果,然后再插入,也可以先插入临时表
      

  12.   

    我用报
    链接服务器"(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" 的数据源对象。
      

  13.   

    我用报
    链接服务器"(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" 的数据源对象。
      

  14.   

    我用报
    链接服务器"(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" 的数据源对象。
      

  15.   

    哈哈,就是因为EXCEL处于打开状态。。晕啊 鼓捣半天是这个原因
      

  16.   

    使用这个方法,要注意两个问题:
    第一:Excel不能处于打开参数;
    第二:Excel中的 表名要命名为Sheet1;
    exec sp_configure 'show advanced options',1reconfigureexec sp_configure 'Ad Hoc Distributed Queries',1reconfigureSelect * From Sysobjects Where id=object_id('R') and  ObjectProperty(id, 'IsUserTable') = 1select * into R from OPENROWSET('MICROSOFT.JET.OLEDB.4.0','Excel 8.0;HDR=YES;DATABASE=C:\Users\mFun\R.xls',sheet1$)exec sp_configure 'Ad Hoc Distributed Queries',0reconfigureexec sp_configure 'show advanced options',0reconfigure
    我最近也在使用这种方法,但还发现了一个问题,目前还没解决,就是例如Excel表有100行,50列,如果第5列,前10个值都为空,第11个值不为空,则导入后,第5列所有的值都是空值。测试发现如果在第11个值的原值前加上一个单引号,则可以解决这问题了,但我需要处理的数据有6000行 203列,手工修改时不可取的,有没有办法通过程式修改Excel数据的值呢?