微软ACE OLEDB连接创建空的Excel时,有166110行(Microsoft ACE OLE

2019-06-24 07:15发布

我编程在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连接,任何想法,为什么它不工作行大小增加时?

Answer 1:

我不知道你的应用环境,而是从一个ASP.NET应用程序生成Excel文件时,我已经看到了这一点。

一旦数据量超过一定规模(约1 MB以我的经验),供应商将尝试创建一个临时文件而产生的输出。 我一直在使用64位系统的32位供应商遇到这个问题。 如果你是下一个服务帐户与此配置中运行,然后在其中创建这些文件的位置是

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

这个位置,然而,这只是可访问administratorsSYSTEM在默认情况下,如果供应商是根据一个非特权帐户运行,并且无法创建临时文件时,它会悄悄地失败,就回到其默认“空文件”与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 ,帮助我解决这个问题。



Answer 2:

一个在我的公司员工今天过这个问题跑了。 解决办法很简单:她离开了基于C只有20MB的可用空间: - 如果你释放你的系统驱动器上有足够的空间,它应该解决的问题。



Answer 3:

在Windows Server 2012R2也检查文件夹是否存在INetCache和该文件夹具有完全perimissions C:\ WINDOWS \ Syswow64资料\ CONFIG \ systemprofile \应用程序数据\本地\微软\的Windows \ INetCache



Answer 4:

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();
    }
}


Answer 5:

如果仍然尝试了以上所有的解决方案后不工作,试试这个,它为我工作:

在你的IIS应用程序池的“高级设置”,变“假”成“ ”,“ 加载用户配置文件 ”的价值。



文章来源: Microsoft ACE OLEDB connection creating empty Excel when there are 166,110 rows