Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Microsoft ACE OLEDB连接在有166110行时创建空Excel_C#_Excel_Oledb_Aceoledb - Fatal编程技术网

C# Microsoft ACE OLEDB连接在有166110行时创建空Excel

C# Microsoft ACE OLEDB连接在有166110行时创建空Excel,c#,excel,oledb,aceoledb,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'"

我正在用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文件时看到了这一点

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

C:\Windows\SysWOW64\config\systemprofile\AppData\Local\Microsoft\Windows\Temporary Internet Files\Content.MSO
但是,默认情况下,
管理员
系统
只能访问此位置,如果提供程序在非特权帐户下运行,并且无法创建临时文件,则它将以静默方式失败,并仅返回其默认的“空文件”,以及
A266FF2A662E84b639DA工作表

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

如果提供程序与系统的位匹配,则我怀疑您需要对
C:\Windows\System32\config\systemprofile\AppData\Local\Microsoft\Windows\Temporary internetfiles\Content.MSO执行上述过程,尽管我从未对此进行过测试


我要感谢
sysinternals
,感谢他们提供了
procmon
,帮助我解决了这个问题。

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

Windows Server 2012R2
还要检查INetCache文件夹是否存在,并且此文件夹是否具有完整的权限C:\Windows\SysWOW64\config\systemprofile\AppData\Local\Microsoft\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应用程序池的“高级设置”中,在搜索google多年后,将“加载用户配置文件””的值从“False”更改为“True

。。。这个答案为我提供了一个解决方案!注意:通常情况下,您无法更改其属性中的
临时Internet文件
文件夹的权限。为此,我使用了
icacls
icacls“C:\Windows\System32\config\systemprofile\AppData\Local\Microsoft\Windows\Temporary internetfiles”/授予您的帐户名:RX
。好吧,4年后,ACE.OLEDB仍然处于崩溃状态:-(它试图在非标准位置创建临时文件是多么愚蠢)。