无法通过OleDb读取xlsx文件,大小超过〜1mb

时间:2016-10-31 13:38:16

标签: c# .net excel oledb

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

  

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

有没有人对这种行为有所了解?

P.S。如果文件大小小于上面提到的,一切都按预期工作。

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

1 个答案:

答案 0 :(得分:2)

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

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