web下读取EXCEL文件,用OLEDB出现未指定的错误,用ODBC出现磁盘或网络错误

来源:互联网 发布:thinking in java mobi 编辑:程序博客网 时间:2024/06/05 09:09

问题1   语句如下:  
  /////////////////////////////////////////////  
                  Dim   DS   As   System.Data.DataSet  
                  Dim   MyCommand   As   System.Data.OleDb.OleDbDataAdapter  
                  Dim   MyConnection   As   System.Data.OleDb.OleDbConnection  
   
                  MyConnection   =   New   System.Data.OleDb.OleDbConnection(   _  
                              "provider=Microsoft.Jet.OLEDB.4.0;   "   &   _  
                              "data   source=D:/HRWeb/JBF/UpLoad/TEMP.XLS;   "   &   _  
                              "Extended   Properties=Excel   8.0;")  
                  MyCommand   =   New   System.Data.OleDb.OleDbDataAdapter(   _  
                              "select   *   from   [Sheet1$]",   MyConnection)  
   
                  DS   =   New   System.Data.DataSet  
                  MyCommand.Fill(DS)  
                  MyCommand.Dispose()  
                  MyConnection.Close()  
                  MyConnection.Dispose()  
   
  *************出现如下错误************  
  “/JBF”应用程序中的服务器错误。  
  --------------------------------------------------------------------------------  
          未指定的错误    
          说明:   执行当前   Web   请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。    
   
  异常详细信息:   System.Data.OleDb.OleDbException:   未指定的错误  
   
  ------------------------------------------  
  问题2  
  目的和问题1是一样的   在ODBC里建了一个系统DSN:   MyExcelOpen     用   Microsoft   Excel   Driver   (*.xls)  
  在   设计环境是如果用   ODBC数据控件,是可以预览的到数据的,但在   执行时还是会出错  
  语句如下:  
   
                  Dim   MyOdbcConnection   As   New   System.Data.Odbc.OdbcConnection  
                  Dim   MyOdbcSelectCommand   As   New   System.Data.Odbc.OdbcCommand  
                  Dim   MyOdbcDataAdapter   As   New   System.Data.Odbc.OdbcDataAdapter  
                  Dim   myExcelDataTable   As   New   System.Data.DataTable  
                  CType(myExcelDataTable,   System.ComponentModel.ISupportInitialize).BeginInit()  
                  MyOdbcConnection.ConnectionString   =   "PageTimeout=5;FIL=excel   8.0;"   &   _  
                                          "MaxBufferSize=2048;DSN=MyExcelOpen;"   &   _  
                                          "DefaultDir=D:/HRWeb/JBF/UpLoad;"   &   _  
                                          "DBQ=D:/HRWeb/JBF/UpLoad/temp.xls;"   &   _  
                                          "DriverId=790"  
                  MyOdbcSelectCommand.CommandText   =   "select   *   from   [Sheet1$]"  
                  MyOdbcSelectCommand.Connection   =   MyOdbcConnection  
                  MyOdbcDataAdapter.SelectCommand   =   MyOdbcSelectCommand  
                  MyOdbcDataAdapter.Fill(myExcelDataTable)  
                  '关闭环境  
                  MyOdbcSelectCommand.Dispose()  
                  MyOdbcDataAdapter.Dispose()  
                  MyOdbcConnection.Close()  
                  MyOdbcConnection.Dispose()  
  *************出现如下错误************  
  “/JBF”应用程序中的服务器错误。  
  --------------------------------------------------------------------------------  
  ERROR   [HY000]   [Microsoft][ODBC   Excel   Driver]   磁盘或网络错误。   ERROR   [IM006]   [Microsoft][ODBC   驱动程序管理器]   驱动程序的   SQLSetConnectAttr   失败   ERROR   [HY000]   [Microsoft][ODBC   Excel   Driver]   磁盘或网络错误。    
  说明:   执行当前   Web   请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。    
   
  异常详细信息:   System.Data.Odbc.OdbcException:   ERROR   [HY000]   [Microsoft][ODBC   Excel   Driver]   磁盘或网络错误。   ERROR   [IM006]   [Microsoft][ODBC   驱动程序管理器]   驱动程序的   SQLSetConnectAttr   失败   ERROR   [HY000]   [Microsoft][ODBC   Excel   Driver]   磁盘或网络错误。  
  **************************************************************************  
  上述错误都是在   fill   这句时出现的  
  不知道是不是在IIS设置方面的问题   还是   权限方面   的问题  
  搜遍贴子,还是没有找到解决办法。   

1 楼baso1623(baso)回复于 2005-08-02 14:04:02 得分 0

如果ODBC将链接语句换成  
   
  Driver={Microsoft   Excel   Driver   (*.xls)};DriverId=790;Dbq=C:/MyExcel.xls;DefaultDir=c:/mypath  
   
  odbc下的错误变成这样  
   
   
  ERROR   [HY000]   [Microsoft][ODBC   Excel   Driver]常见错误   不能打开注册表关键字   'Temporary   (volatile)   Jet   DSN   for   process   0x940   Thread   0x180   DBC   0x5f65f14   Excel'。   ERROR   [IM006]   [Microsoft][ODBC   驱动程序管理器]   驱动程序的   SQLSetConnectAttr   失败   ERROR   [HY000]   [Microsoft][ODBC   Excel   Driver]常见错误   不能打开注册表关键字   'Temporary   (volatile)   Jet   DSN   for   process   0x940   Thread   0x180   DBC   0x5f65f14   Excel'。   ERROR   [HY000]   [Microsoft][ODBC   Excel   Driver]   磁盘或网络错误。   ERROR   [HY000]   [Microsoft][ODBC   Excel   Driver]常见错误   不能打开注册表关键字   'Temporary   (volatile)   Jet   DSN   for   process   0x940   Thread   0x180   DBC   0x5f65f14   Excel'。   ERROR   [HY000]   [Microsoft][ODBC   Excel   Driver]常见错误   不能打开注册表关键字   'Temporary   (volatile)   Jet   DSN   for   process   0x940   Thread   0x180   DBC   0x5f65f14   Excel'。   ERROR   [HY000]   [Microsoft][ODBC   Excel   Driver]   磁盘或网络错误。    
  Top

2 楼hamadou(闵峰--为了理想而奋斗)回复于 2005-08-02 15:08:03 得分 5

http://www.connectionstrings.com/Top

3 楼baso1623(baso)回复于 2005-08-02 15:37:49 得分 0

OLEDB、ODBC链接字符串我就是按   这个的呀  
  http://www.connectionstrings.com/  
   
  OLEDB连接字符MSDN帮助里也有的  
   
  在线等......  
   
  Top

4 楼AntingZ(夕惕若)回复于 2005-08-02 16:08:48 得分 5

估计是连接字符串中data   source=D:/HRWeb/JBF/UpLoad/TEMP.XLS;使用的路径的问题  
  你的web有没有权限访问D:/HRWeb/JBF/UpLoad/TEMP.XLS   ?  
  连接一般用相对路径,用server.mappath()转换一下成绝对路径,本来对web不是很了解,本子上又没有装IIS,没法测试,你把Temp.xls换到你的虚拟目录下试试看  
  Top

5 楼baso1623(baso)回复于 2005-08-02 17:15:13 得分 0

有权限呀  
   
  d:/hwweb/jbf  
   
  就是一个   虚拟目录     upload   有设置了权限了  
   
  在资源管理器   的目录   里添加   来宾用户可访问         在   IIS里   UPLOAD可以匿名访问  
   
  Top

6 楼baso1623(baso)回复于 2005-08-02 20:14:43 得分 0

没有人呀Top

7 楼baso1623(baso)回复于 2005-08-03 08:42:27 得分 0

而且   这个目录     D:/HRWeb/JBF/UpLoad     是支持   匿名上传   的目录,测试成功的呀!  
  Top

8 楼xu770(我爱鱼儿)回复于 2005-08-03 08:48:26 得分 5

要.net的帐户有权限Top

9 楼baso1623(baso)回复于 2005-08-03 10:15:34 得分 0

.net的帐户   应该是   ASP.NET用户吧  
   
  权限在哪里设置呀!!!!!!!  
   
  DCOMCNFG里   Microsoft   Excel   应用程序里也设置了呀!!!Top

10 楼fphuang(人在哈尔滨·四月)回复于 2005-08-03 14:29:50 得分 5

文件夹有件--属性--安全--添加aspnet完全权限Top

11 楼baso1623(baso)回复于 2005-08-03 15:01:22 得分 0

aspnet   是有权限的呀  
   
  D:/HRWeb/JBF/Upload  
   
  支持上传的呀,客户端可以把文件写到这个目录,那应该是有权限的呀Top

12 楼baso1623(baso)回复于 2005-08-03 23:22:59 得分 0

对   CSDN   实在是越来越望了   :(Top

13 楼hchxxzx(NET?摸到一点门槛)回复于 2005-08-03 23:37:30 得分 10

此问题你可查:  
  1、在代码打开时间内,此文件是否被打开(比如打开查看它)  
  2、在代码打开之前,有无其他代码打开此文件而对象未关闭?  
  3、你的MDAC   太低  
  4、如果上述处理方法均不能,没有办法了,请重新安装系统。Top

14 楼cuike519(I will be back!)回复于 2005-08-04 06:38:33 得分 10

1、在环境变量中创建TMP或者TEMP,并指向一个已经存在的目录。  
  2、在将这个文件夹指定为IIS里面的匿名访问用户可以访问(就是那个IUSER_Machine的用户)。  
   
  因为JET在启动的时候会创建一个mdb(或xls)的复本,它首先将这个复本通过检索环境变量中的TMP和(或)TEMP来创建在他们指定的目录下面,如果没有这两个环境变量,这个临时文件将被创建在WinNt(操作系统的目录)下面,通常这个目录是没有对IUSER_用户开放的。Top

15 楼zeusvenus()回复于 2005-08-04 07:27:21 得分 10

如果是上面说的权限问题,楼主可以在你数据所在文件及其文件夹赋予ASPNET和VSDEVELOPER可以读写的权限,在iis里设置匿名用户可以访问。  
  但我觉得问题不这么简单,很可能是数据提供者的问题,如果你的odbc版本不符合vs.net的需要,数据访问会出类似的问题,可以下载个新版本支持dotnet的odbc驱动看看。Top

16 楼zeusvenus()回复于 2005-08-04 07:30:42 得分 0

很可能是odbc驱动版本太低,重装个高版本的mdac试试。  
  另外可以参考下:  
  http://msdn.microsoft.com/library/chs/default.asp?url=/library/CHS/cpref/html/frlrfsystemdataodbcodbcexceptionclasstopic.asp  
  与  
  http://support.microsoft.com/default.aspx?scid=kb;zh-cn;821958Top

17 楼baso1623(baso)回复于 2005-08-04 09:14:32 得分 0

问题终于解决啦!!!!  
   
  在   WEB.CONFIG   里   我为了能够在   WEB上使用   EXCEL.APPLICATION    
  加了一句  
   
  identity   impersonate="true"  
   
   
  把这一句删除掉,一切OK......  
   
  高兴啊,结贴喽!!!!
Top
这个方法非常有效

18 楼AntingZ(夕惕若)回复于 2005-08-04 23:41:22 得分 0

原来是这样Top

19 楼baso1623(baso)回复于 2005-08-05 19:19:47 得分 0

算是经验共享

 

 

原创粉丝点击