OLEDBConnection.Open()生成"未指定的错误"
我有一个应用程序,该应用程序将Excel .xls文件上载到文件系统,使用对象实例上的.open()方法使用oledbconnection对象打开该文件,然后将数据存储在数据库中。将文件上传和写入文件系统工作正常,但是尝试仅在生产服务器上打开文件时出现错误。该应用程序可以在其他两个服务器(开发和测试服务器)上正常工作。
以下代码在Exception.Message中生成"未指定的错误"。
引用:
System.Data.OleDb.OleDbConnection x = new System.Data.OleDb.OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + location + ";Extended Properties='Excel 8.0;HDR=Yes;IMEX=1'"); try { x.Open(); } catch (Exception exp) { string errorEmailBody = " OpenExcelSpreadSheet() in Utilities.cs. " + exp.Message; Utilities.SendErrorEmail(errorEmailBody); }
:结束报价
服务器的c:\ temp和c:\ Documents and Settings \ aspnet \ local settings \ temp文件夹都赋予\ aspnet完全控制权。
我认为存在某种权限问题,但似乎无法在所提到的文件夹与上载Excel文件的文件夹/目录之间找到任何区别。使用相同的位置保存文件并打开它,并且这些方法在我的工作站和两个Web服务器上都有效。 Windows 2000 SP4服务器。
解决方案
内部异常中有什么吗?这是64位应用程序吗? OLEDB提供程序不能在64位上工作。我们必须具有应用程序目标x86. 尝试在我的64位计算机上打开Access DB时遇到错误时,发现了此错误。
关于权限问题,我已经犯了这个错误,但是看来我们已经解决了这个问题。我还通过连接字符串中的标志之一看到了它-我们可能会稍微玩一点。
是的。我也是。拿出IMEX = 1,拿出扩展属性,等等。我设法在开发和测试服务器上将其打破。 :)我一次将它们放回去,直到它在开发中修复并再次测试,但在产品上仍然没有任何工作。
尝试将位置用单引号引起来
System.Data.OleDb.OleDbConnection x = new System.Data.OleDb.OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source='" + location + "';Extended Properties='Excel 8.0;HDR=Yes;IMEX=1'");
虽然权限问题可能更常见,但是我认为Windows文件系统/ Access Jet DB Engine连接限制(64/255)也可能会遇到此错误。如果我们破坏了255个Access读写并发连接或者每个进程的64(?)连接限制,则可能会得到这个完全相同的错误。至少我在一个不断创建连接且从未正确关闭连接的应用程序中遇到过这种情况。一个简单的Conn.close();
插进去,生活很美好。我认为Excel可能有类似的问题。