Elo*_*ise 2 c# oledb excel 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'"
))
Run Code Online (Sandbox Code Playgroud)
当行数不多时,这会成功并创建包含正确数据的 Excel 电子表格。但是,每当电子表格中的行数增加到很大时(例如,当前它在 166,110 行上失败),它会生成一个空电子表格,其中工作表选项卡名称设置为A266FF2A662E84b639DA。
不可能重写它以便它不使用OLEDB连接,任何想法为什么当行大小增加时它不起作用?
小智 5
我不确定您的应用程序环境,但我在从 ASP.NET 应用程序生成 Excel 文件时看到了这一点。
一旦数据量超过特定大小(根据我的经验约为 1 MB),提供程序将在生成输出时尝试创建临时文件。我在 64 位系统上使用 32 位提供程序遇到了这个问题。如果您在具有此配置的服务帐户下运行,则创建这些文件的位置为
C:\Windows\SysWOW64\config\systemprofile\AppData\Local\Microsoft\Windows\Temporary Internet Files\Content.MSO
Run Code Online (Sandbox Code Playgroud)
这个位置,然而,这只是对访问administrators和SYSTEM默认情况下,如果提供商在运行非特权帐户,无法创建临时文件时,它会悄悄地失败,就回到其默认“空文件”与A266FF2A662E84b639DA工作表。
您需要做的是授予在(例如网络服务或 IIS AppPool\)下运行的应用程序的帐户沿路径“ C:\Windows\SysWOW64\config\systemprofile\AppData\Local\Microsoft\Windows\Temporary Internet Files”读取/执行/列出内容权限,然后完全访问Content.MSO文件夹本身。
如果提供程序与您的系统的位数匹配,那么我怀疑您需要执行上述过程C:\Windows\System32\config\systemprofile\AppData\Local\Microsoft\Windows\Temporary Internet Files\Content.MSO,尽管我从未对此进行过测试。
我要感谢sysinternals提供procmon帮助我解决此问题的人。
| 归档时间: |
|
| 查看次数: |
4379 次 |
| 最近记录: |