无法通过尺寸大于1mb的OleDb读取xlsx文件

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

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

有没有人有这样的行为的想法?

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

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

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

从本质上讲, xlsx格式是一些zip文件和一堆xml文件。 因此,首先ACEOLEDB提供者尝试将所有数据直接解压缩到内存缓冲区,但是如果大型xlsx文件提供程序无法将所有数据解压缩到内存缓冲区,并且强制在硬盘上创build临时文件。 如果用户没有权限文件夹Content.MSO在硬盘驱动器上提到的问题出现。 文件夹path取决于你的环境。 在我的情况下是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的访问权限并且问题消失。