0

我有一个使用 .NET 3.5 的 VB 应用程序,它允许用户上传 Excel 文件。然后应用程序从该文件中读取并将其内容插入到数据库中。

问题是读取似乎仅在我们的生产环境中失败。这是产生的错误:

ErrorMessage: System.Data.OleDb.OleDbException: Unspecified error
   at System.Data.OleDb.OleDbConnectionInternal..ctor(OleDbConnectionString constr, OleDbConnection connection)
   at System.Data.OleDb.OleDbConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningObject)
   at System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection, DbConnectionPoolGroup poolGroup)
   at System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection)
   at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
   at System.Data.OleDb.OleDbConnection.Open()
   at uploader.ReadExcel(String sFile) in E:\path_to_application\uploader.aspx.vb:line 85

这是 uploader.aspx.vb 中 ReadExcel 函数的第 84 和 85 行:

oConn = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + sFile + ";Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1"";")
oConn.Open()

oConn.Open() 仅在生产中失败,我的本地机器上完全相同的代码库按预期工作。

  • 该文件确实存在于sFile变量中指定的路径中
  • 这个问题表明超过并发连接限制可能是一个问题,但即使在使用 IIS 重新启动应用程序后,问题仍然存在
  • 这似乎不是权限问题,服务器上的所有用户组至少对上传的文件具有读取和执行权限

我还可以在生产环境和本地环境之间寻找哪些其他差异?还有什么可能导致打开此 OleDB 连接失败?

更新:一种解决方法似乎是在 IIS 中回收应用程序池。关于修复它的重置是什么的任何想法?

4

2 回答 2

1

I have not used OleDb myself, but I have worked with the Jet driver. It is very important to have the proper version of the driver for the OS environment. For some time there was no 64 bit driver, but they released one in 2010. You can download it here:

http://www.microsoft.com/en-us/download/details.aspx?id=13255

Another option may be to run the application in 32-bit mode. It's also possible that this is not the problem, but based on your results it does seem quite likely.

于 2013-01-15T17:34:59.633 回答
0

probackpacker 会说,如果您的应用程序在 64 位环境中,它将无法工作,因为没有 64 位 OLEbd 驱动器

于 2013-01-15T17:12:48.587 回答