当有166,110行时,Microsoft ACE OLEDB连接创建空Excel

时间:2012-05-09 18:15:15

标签: c# excel oledb aceoledb

我使用C#编程并使用oledbconnection。这是标准连接字符串,例如

using (OleDbConnection conn = new OleDbConnection(
          "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" +
           saveFilenameAndLocation + 
          ";Extended Properties='Excel 12.0 Xml;HDR=Yes'"
      ))  

当行数不过多时,这会成功运行并创建包含正确数据的Excel电子表格。但是,只要电子表格中的行数增加到较大的大小(例如,当前它在166,110行上失败),就会生成一个空的电子表格,工作表标签名称设置为A266FF2A662E84b639DA

不能重写这个,以便它不使用OLEDB连接,任何想法为什么它在行大小增加时不起作用?

5 个答案:

答案 0 :(得分:4)

我不确定您的应用程序环境,但是从ASP.NET应用程序生成Excel文件时我已经看到了这一点。

一旦数据量超过一定的大小(根据我的经验,大约为1 MB),提供程序将在生成输出时尝试创建临时文件。我在64位系统上使用32位提供程序遇到过这个问题。如果您使用此配置在服务帐户下运行,则创建这些文件的位置为

C:\Windows\SysWOW64\config\systemprofile\AppData\Local\Microsoft\Windows\Temporary Internet Files\Content.MSO

但是,默认情况下,此位置只能由administratorsSYSTEM访问,并且如果提供商在非特权帐户下运行且无法创建临时文件将以静默方式失败,只返回其A266FF2A662E84b639DA工作表的默认“空文件”。

您需要做的是授予在“C:\Windows\SysWOW64\config\systemprofile\AppData\Local\Microsoft\Windows\Temporary Internet Files”路径下运行的应用程序帐户(例如网络服务或IIS AppPool \)读取/执行/列出内容权限,然后完全访问Content.MSO文件夹本身。

如果提供商与您系统的位数相匹配,那么我怀疑您需要执行C:\Windows\System32\config\systemprofile\AppData\Local\Microsoft\Windows\Temporary Internet Files\Content.MSO上面的过程,尽管我从未对此进行过测试。

我要感谢sysinternals提供帮助我解决此问题的procmon

答案 1 :(得分:0)

我公司的一名员工今天遇到了这个问题。解决方案很简单:她在C上只剩下20MB的可用空间: - 如果你在系统驱动器上腾出足够的空间,它应该可以解决问题。

答案 2 :(得分:0)

Windows Server 2012R2 还要检查文件夹INetCache是​​否存在且此文件夹是否具有完整的权限C:\ Windows \ SysWOW64 \ config \ systemprofile \ AppData \ Local \ Microsoft \ Windows \ INetCache

答案 3 :(得分:0)

10小时后我找到了解决方案。

每1000行我们必须关闭并重新打开连接。

示例在这里。

foo.h

答案 4 :(得分:0)

如果在尝试了上述所有解决方案后仍然无效,请尝试使用此解决方案,这对我有用:

在IIS应用程序池的“高级设置”中,将“加载用户个人资料”的值从“False”更改为“ True ”。