C# 使用64位OLEDBConnection的64位.NET应用无法使用X080004005编写excel电子表格

C# 使用64位OLEDBConnection的64位.NET应用无法使用X080004005编写excel电子表格,c#,.net,excel,oledbconnection,C#,.net,Excel,Oledbconnection,我有一个Windows服务应用程序(C#,.NET4.0框架),可以读取和写入excel电子表格。在Windows 2012 server/SP2上,它在32位模式下运行良好 我已将其转换为以64位模式运行。我们删除了Access 2007驱动程序,并在服务器上安装了Microsoft Access数据库引擎_x64。之后启动服务器只是为了确定 它仍然可以读取电子表格。但是,当它试图打开另一个OLEDB连接以写入错误时,在打开OLEDB连接时,会出现E_FAIL X80004005,这是一种捕获

我有一个Windows服务应用程序(C#,.NET4.0框架),可以读取和写入excel电子表格。在Windows 2012 server/SP2上,它在32位模式下运行良好

我已将其转换为以64位模式运行。我们删除了Access 2007驱动程序,并在服务器上安装了Microsoft Access数据库引擎_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
此时只是一个文件名,并且还不存在,因为我们将对其进行写入。但是,使用OLEDB 32一致性连接字符串时,相同的代码可以正常工作。另外,请注意,无论要编写的
responseExcelFile
是.xsl还是.xslx,我都会遇到相同的错误

这不是权限问题,运行服务的帐户完全控制文件名中的目录。它也不是重复的文件名,因为它带有时间戳

收到的实际错误是:

错误---批量查询导出过程错误:NewBulkQueryProcessor: IErrorInfo.GetDescription失败,E_失败(0x80004005)。至少 System.Data.OleDb.OleDbConnectionInternal..ctor(OleDbConnectionString 施工,OLEDB连接)在 System.Data.OleDb.OleDbConnectionFactory.CreateConnection(DbConnectionOptions 选项、DbConnectionPoolKey poolKey、对象poolGroupProviderInfo、, DbConnectionPool池,DbConnection owningObject)位于 System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection、DbConnectionPoolGroup poolGroup、DbConnectionOptions 用户选项)位于 System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection,TaskCompletionSource'1重试,DbConnectionOptions 用户选项、DbConnectionInternal oldConnection、DbConnectionInternal& 连接)在 System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection 外部连接,数据库连接工厂连接工厂, TaskCompletionSource的1重试,DbConnectionOptions用户选项)位于 System.Data.ProviderBase.DbConnectionInternal.OpenConnection(DbConnection outerConnection,DbConnectionFactory连接工厂)位于 System.Data.OleDb.OleDbConnection.Open()位于 BulkQuery.BulkQueryOutputFile.CreateExcelSpreadsheet(字符串 responseExcelFile)


任何帮助都将不胜感激。

我最近遇到了一个类似的问题,结果是最近的Windows更新导致了这个问题。不幸的是,所有的信息都在工作,我无法找到它后,快速搜索。也许这将帮助您追踪问题…卸载10月11日更新的KB4041676--Windows 10版本1703/KB4041691--Windows 10版本1607和Windows Server 2016/KB4041693--Windows 8.1和Windows Server 2012/KB4041681--Windows 7和Windows Server 2008 R2,或者将Microsoft.Jet.OLEDB.4.0更改为Microsoft.ACE.OLEDB.12.0(如果需要)只有office 2003或需要创建excel文件,必须安装此2007:这是双重失败。它首先是在尝试初始化ACE数据提供程序时失败的,然后又试图获得一条相当不错的错误消息,但也失败了。因此,这只是一堆失败,这是尝试使用64位ACE提供程序的常见结果。谷歌“ace x64 e_fail”,点击率很高。@Pathum Anjana评论-我们不清楚如何解释该建议。对于Windows 7和Windows Server 2008 R2,我们是否要安装或卸载KB404161681。系统管理员解释说这意味着要安装它,之后,尽管打开了EXCEL 12.0连接,但我们收到了错误消息,即未安装Microsoft.Jet.OleDB 4.0组件!另一个相关问题。我使用Access 2007引擎在Windows7上以32位模式运行了相同的代码。突然,当试图打开连接以编写新的电子表格时,我收到了错误“无法更新。数据库或对象是只读的”。我阅读了一些文章以将Mode=ReadWrite添加到扩展属性中,但收到了相同的错误。此错误是否也是由于Windows 7更新引起的?