我有一个Windows服务应用程序(C#,.NET 4.0框架),可以读取和写入excel电子表格。在Windows 2012 Server / SP2上,它可以在32位模式下正常运行。
我已将其转换为以64位模式运行。我们删除了Access 2007驱动程序并在服务器上安装了Microsoft Access数据库Engine_x64。之后启动服务器只是为了确定。
它仍然可以阅读电子表格。但是,当它打开OLEDB连接时,尝试打开另一个OLEDB连接以使用E_FAIL X80004005写出错误,捕获所有错误类型。
使用的连接字符串是:
connectionstring = "Provider=Microsoft.ACE.OLEDB.12.0; " +
"Data Source=" + responseExcelFile + ";"
+ @"Extended Properties=""Excel 12.0;""";
注意我已经尝试使用IMEX=1;HDR=YES
,虽然我们得到了相同的结果,这些选项似乎是面向阅读电子表格而不是写一个。
我意识到的一件事是连接字符串responseExcelFile
中的data source
此时只是一个文件名,并且还不存在,因为我们要写入它。但是,使用OLEDB 32符合连接字符串时相同的代码工作正常。另外,请注意,无论要写入的responseExcelFile
是.xsl还是.xslx,我都会收到同样的错误。
这不是权限问题,运行服务的帐户可以完全控制文件名中的目录。它也不是重复的文件名,因为它带有时间戳。
收到的实际错误是:
错误---批量查询导出过程错误:NewBulkQueryProcessor: IErrorInfo.GetDescription因E_FAIL(0x80004005)而失败。 at at System.Data.OleDb.OleDbConnectionInternal..ctor(OleDbConnectionString constr,OleDbConnection连接)at System.Data.OleDb.OleDbConnectionFactory.CreateConnection(DbConnectionOptions options,DbConnectionPoolKey poolKey,Object poolGroupProviderInfo, DbConnectionPool池,DbConnection owningObject)at System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(的DbConnection owningConnection,DbConnectionPoolGroup poolGroup,DbConnectionOptions userOptions)at System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(的DbConnection owningConnection,TaskCompletionSource'1重试,DbConnectionOptions userOptions,DbConnectionInternal oldConnection,DbConnectionInternal& 连接) System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(的DbConnection outerConnection,DbConnectionFactory connectionFactory, TaskCompletionSource'1重试,DbConnectionOptions userOptions)at System.Data.ProviderBase.DbConnectionInternal.OpenConnection(的DbConnection outerConnection,DbConnectionFactory connectionFactory)at System.Data.OleDb.OleDbConnection.Open()at BulkQuery.BulkQueryOutputFile.CreateExcelSpreadsheet(字符串 responseExcelFile)
任何帮助都将不胜感激。