【问题标题】:Unable to read xlsx file through OleDb with the size more than ~1mb无法通过 OleDb 读取大小超过 ~1mb 的 xlsx 文件
【发布时间】:2016-10-31 13:38:15
【问题描述】:

我想使用 sql 批量复制将数据从 *.xlsx 文件加载到数据库。但是,当文件大小超过大约 1mb 时,我遇到了这个问题。当我尝试打开 OleDbConnection 时出现错误

No error message available, result code: E_FAIL(0x80004005)

有人知道这种行为吗?

附:如果文件大小小于上面提到的,一切都会按预期工作。

string connString = connString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties=Excel 12.0 Xml;";

// Create the connection object 
OleDbConnection oledbConn = new OleDbConnection(connString);
// Open connection
oledbConn.Open();
// Create OleDbCommand object and select data from worksheet
OleDbCommand cmd = new OleDbCommand("SELECT * FROM [" + WorkSheetName + "$" + DataRange + "]", oledbConn);
OleDbDataReader dr = cmd.ExecuteReader();

string ProfDbBulkCopyConnString = ConfigurationManager.ConnectionStrings["DbBulkCopyConnString"].ToString();
SqlBulkCopy sb = new SqlBulkCopy(ProfDbBulkCopyConnString);
sb.ColumnMappings.Add("Status", "ActionStatus");
sb.ColumnMappings.Add("Process", "ProcessExec");
sb.DestinationTableName = "dba.Execute";
sb.WriteToServer(dr);

【问题讨论】:

  • 也许您用来执行此操作的源代码可能会有所帮助...并在提出下一个问题之前阅读How to Ask
  • @Chomel 在这里。希望没有什么令人困惑的地方。
  • 现在我们得到更多信息!
  • 你的路径字符串中有空格吗?
  • @Bridge 该字符串的发布方式与代码中的内容完全相同。这似乎是正确的。不是吗?我倾向于认为问题与驱动程序有关,但我无法找出确切的原因。

标签: c# .net excel oledb


【解决方案1】:

只是对修复的简要说明。欲了解更多信息,我建议访问:

从本质上讲,xlsx 格式是某种带有一堆 xml 文件的 zip 存档。因此,首先 ACEOLEDB 提供程序尝试将所有数据直接解压缩到内存缓冲区,但如果大型 xlsx 文件提供程序无法将所有数据解压缩到内存缓冲区,它会强制在硬盘驱动器上创建临时文件。如果用户无权访问硬盘驱动器上的文件夹 Content.MSO,则会出现上述问题。 文件夹路径取决于您的环境。在我的情况下,它是 C:\Windows\SysWOW64\config\systemprofile\AppData\Local\Microsoft\Windows\Temporary Internet Files\Content.MSO(64 位 Windows Server 2008 R2 上的 32 位驱动程序)。 因此,授予用户“IIS AppPool\DefaultAppPool”对 Content.MSO 的访问权限,问题就会消失。

【讨论】:

  • 我的路径是:C:\Users\myusername\AppData\Local\Microsoft\Windows\Temporary Internet Files。但是 Content.MSO 不存在吗?还有没有创建这个文件夹的选项?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多