我编程在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电子表格完全正确的数据,当行数也不为过。 然而,每当行的电子表格中的增大到大尺寸的数目(例如当前它是失败上166110行),它产生与设定为所述工作表选项卡名称的空电子表格A266FF2A662E84b639DA
。
这是不可能改写这个,以便它不使用OLEDB
连接,任何想法,为什么它不工作行大小增加时?
我不知道你的应用环境,而是从一个ASP.NET应用程序生成Excel文件时,我已经看到了这一点。
一旦数据量超过一定规模(约1 MB以我的经验),供应商将尝试创建一个临时文件而产生的输出。 我一直在使用64位系统的32位供应商遇到这个问题。 如果你是下一个服务帐户与此配置中运行,然后在其中创建这些文件的位置是
C:\Windows\SysWOW64\config\systemprofile\AppData\Local\Microsoft\Windows\Temporary Internet Files\Content.MSO
这个位置,然而,这只是可访问administrators
和SYSTEM
在默认情况下,如果供应商是根据一个非特权帐户运行,并且无法创建临时文件时,它会悄悄地失败,就回到其默认“空文件”与A266FF2A662E84b639DA
工作表。
你需要做的是给予帐户下运行的应用程序(例如网络服务或IIS应用程序池\)读/沿着路径“执行/列表内容权限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
,帮助我解决这个问题。
一个在我的公司员工今天过这个问题跑了。 解决办法很简单:她离开了基于C只有20MB的可用空间: - 如果你释放你的系统驱动器上有足够的空间,它应该解决的问题。
在Windows Server 2012R2也检查文件夹是否存在INetCache和该文件夹具有完全perimissions C:\ WINDOWS \ Syswow64资料\ CONFIG \ systemprofile \应用程序数据\本地\微软\的Windows \ INetCache
10小时后我找到了解决办法。
每1000行,我们必须关闭并重新打开连接。
样品在这里。
string createTable = "Create Table [Sheet_X] (field1 char(255), field2 char(255),field3 char(255));";
OleDbCommand cmd = new OleDbCommand(createTable, conn);
conn.Open();
cmd.ExecuteNonQuery();
var counter = 0;
foreach (var item in items)
{
if (conn.State == ConnectionState.Closed)
conn.Open();
string insertdata = "insert into [Sheet_X] (field1,field2,field3) values('value1','value2','value3');";
counter++;
if (counter >= 1000)
{
counter = 0;
conn.Close();
}
}
如果仍然尝试了以上所有的解决方案后不工作,试试这个,它为我工作:
在你的IIS应用程序池的“高级设置”,变“假”成“ 真 ”,“ 加载用户配置文件 ”的价值。
文章来源: Microsoft ACE OLEDB connection creating empty Excel when there are 166,110 rows