我以前做了一个WEB程序,是把EXCEL表上传到服务器,然后再把EXCEL表中的数据导入数据库,也是在网上查的SQL导入导出语句资料,别的都试了不好使,就下面写的这种好使, sql = "SELECT * INTO " + ttxt + "  FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0','Excel 8.0;Database=" + filename + "', [" + stxt + "$])";  不知道为什么,ttxt,filename还有stxt都是程序里的变量,其中stxt是EXCEL表中的工作薄名如:Sheet1,Sheet2等,以前用着挺好,现在领导让我改,改成那种一次可以上传多个工作薄的,以前那个只能上传一个工作薄嘛,上网查也没查到,都是以前用过不好用的,以前那个是上传一个工作薄,再上传可以把以前的覆盖的嘛,现在要求新建表的时候是上传一个表的多个工作薄,更新的时候可以上传原表(里面加了数据)覆盖原有数据,也可以是一个新的EXCEL表追加到数据表中。一个头两个大,如果我没说明白,可以再问,强人们一定要帮我解决了呀,郁闷中,如果解决再追加50分,跪求。在线等!

解决方案 »

  1.   

    Test.xls
    Sheet1
    col1 col2 col3
    a d a
    b e s
    c f c
    Sheet2
    col1 col2 col3
    a d a
    b e s
    c f c
    Sheet3
    col1 col2 col3
    a d a
    b e s
    c f c
    先建表
    create table testxls
    (
    col1 varchar(10),
    col2 varchar(10),
    col3 varchar(10)
    )
    插入
    declare @a varchar(20),
            @sql varchar(8000)
    set @a='Sheet1$'----Sheet2$,3$同理,用动态SQL语句
    set @sql='
    insert into 
    testxls select * from openrowset(''MICROSOFT.JET.OLEDB.4.0'',
    ''Excel 5.0;HDR=YES;DATABASE=C:\test.xls'','+@a+')'
    print @sql
    exec(@sql)
      

  2.   

    你是用的SQL2000还是SQL2005试的,我以前那个不是用的OPENROWSET做的吗,这个OPENDATASOUSE以前用就不好用,是在2000上试的,现在我们的程序和数据库都换成2005的了,这个上面连我以前的那个都不好使了,我执行下面的语句:select * into serv_user_bak 
    from OpenRowSet('microsoft.jet.oledb.4.0','Excel 8.0;database=c:\book1.xls;','[Sheet1$]')
    以前这个在2000上是好使的,现在2005上执行出现的错误是这样的:消息 15281,级别 16,状态 1,第 1 行
    SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATEMENT'OpenRowset/OpenDatasource' 的访问,因为此组件已作为此服务器安全配置的一部分而被关闭。系统管理员可以通过使用 sp_configure 启用 'Ad Hoc Distributed Queries'。有关启用 'Ad Hoc Distributed Queries' 的详细信息,请参阅 SQL Server 联机丛书中的 "外围应用配置器"。 然后根据它的提示,进行了修改,还是不好使,帮我先整整这个吧,这个好使了,你给我语句才能好使,呵呵,帮帮忙吗?下班了,我回家等。