我写了一个存储过程:从EXCEL文件中读取数据,然后做进一步处理. 这个存储过程在查询分析器中能执行,但在Asp.net中去调用它时,出现如下错误:
 已拒绝对 OLE DB 提供程序 'Microsoft.Jet.OLEDB.4.0' 的特殊访问。必须通过链接服务器来访问此提供程序。 
   但是如果我将连接数据库的用户设成具有system administrator时,却不会出现此错误, 可怜的是我的正式数据库是托管在别人服务器上,不给开system administrator的权限.
   高手指教啊.

解决方案 »

  1.   

    asp.net里直接读取吧,用
    http://sz.luohuedu.net/xml/ShowDetail.asp?id=C673E2CD-3F1E-4919-8CE0-D69B894A0599
      

  2.   

    这个需要在你的服务器COM组件中设置..步骤:
    控制面板--管理工具--组件服务--我的电脑--DCOM配置--选中Microsoft Excel---属性--安全--访问权限--自定义--配置---添加ASPNET帐号,分配读写的权限..
      

  3.   

    当然,你可以直接分配Everyone为完全..
      

  4.   

    TO:孟子E章
       我在前台中是用你那种方法将EXCEL数据预览出来了,但我不想在前台去遍历那些数据再保存到数据库去,因为还要建一个表,然后将表名传给存储过程去对数据进行特殊处理,我必须用存储过程处理数据的原因是必须将数据先保存到临时表中去,然后再从临时表中将一部分数据由纵向的变成横向的数据,总之是比较复杂的数据处理,我在存储过程中是用这种方法: SET @tmpTable='[##tmp' +convert(varchar(23),getdate(),121) + ']'    if object_id('tempdb..' + @tmpTable) is not null             
                   exec('drop table ' + @tmpTable)    --存储从Excel导入的一列的数据
        SET @singleColumnTable='[##tmp' +convert(varchar(23),getdate(),121) + '_2]'    if object_id('tempdb..' + @singleColumnTable) is not null             
                   exec('drop table ' + @singleColumnTable)    --导入数据到@tmptable中
        Exec('Select identity(int,1,1) as id,* into ' + @tmpTable + ' From OPENROWSET (''MICROSOFT.JET.OLEDB.4.0'',''Excel 8.0;IMEX=1;HDR=YES;DATABASE='+@FileName + ''',sheet1$)')....进一步处理
    这个存储过程有什么方法能让前台调用而不出现这个错误呢?:已拒绝对 OLE DB 提供程序 'Microsoft.Jet.OLEDB.4.0' 的特殊访问。必须通过链接服务器来访问此提供程序。 
      

  5.   

    TO: net_lover(孟子E章) :
        用你的方法去读EXCEL中数据时为什么只能读出数值型数据,比如 A1单元格中存的内容是"Name",A2存的是"123",A3中存的是"235"...那么读出来A1的内容为空.
      

  6.   

    "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\MyExcel.xls;Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1""" 关键是IMEX=1
      

  7.   

    还是  smile9961(正是江南好风景,落花时节又逢君。)  高手厉害!!!
    我忽略了HDR=Yes;IMEX=1这两个参数.