使用64位OLEDBConnection的64位.NET应用程序无法使用X080004005编写Excel电子表格

时间:2017-10-31 18:09:43

标签: c# .net excel oledbconnection

我有一个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)

任何帮助都将不胜感激。

0 个答案:

没有答案
相关问题