C#导出EXCEL超大数据源码,解决内存溢出问题,使用OLEDB方式(NPOI做不到)
2017-11-28 17:07
2016 查看
最近工作导数据失败,找问题原因:ORALCE导出数据,超出5w多条数据,由于数据量过大(加上列数多),无法导出。
PLSQL工具导出EXCEL失败,卡死白屏。
使用NPOI第三方类导出EXCEL失败,超出100+M多的数据就抛出异常提示内存溢出。
使用微软的Interop.EXCEL组件导出失败,运行中提示内存溢出。
最后找到方法,使用OLEDB方式,数据导出到EXCEL文件,数据量大的时候,运行占用内存明显比NPOI和微软组件小(不超过100M)。
代码可以直接使用,而且可以自定义分页数。
喜欢的点个赞吧。(别忘了数据需要过滤分号)
PLSQL工具导出EXCEL失败,卡死白屏。
使用NPOI第三方类导出EXCEL失败,超出100+M多的数据就抛出异常提示内存溢出。
使用微软的Interop.EXCEL组件导出失败,运行中提示内存溢出。
最后找到方法,使用OLEDB方式,数据导出到EXCEL文件,数据量大的时候,运行占用内存明显比NPOI和微软组件小(不超过100M)。
代码可以直接使用,而且可以自定义分页数。
喜欢的点个赞吧。(别忘了数据需要过滤分号)
/// <summary> /// 使用OLEDB导出Excel /// </summary> /// <param name="dt">数据集</param> /// <param name="filepath">文件目录和文件名</param> /// <param name="tablename">SHEET页名称</param> /// <param name="pagecount">每页记录数</param> public static void Export(DataTable dt, string filepath, string tablename, int pagecount) { //excel 2003格式 string connString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filepath + ";Extended Properties=Excel 8.0;"; //Excel 2007格式 //string connString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filepath + ";Extended Properties=Excel 12.0 Xml;"; try { using (OleDbConnection con = new OleDbConnection(connString)) { con.Open(); //开始分页 if (dt.Rows.Count > pagecount) { int page = dt.Rows.Count / pagecount + 1; //总页数 for (int i = 0; i < page; i++) { //建新sheet和表头 StringBuilder strSQL = new StringBuilder(); string tabname = tablename + i.ToString(); strSQL.Append("CREATE TABLE ").Append("[" + tabname + "]"); //每60000项建一页 strSQL.Append("("); for (int j = 0; j < dt.Columns.Count; j++) { strSQL.Append("[" + dt.Columns[j].ColumnName + "] text,"); } strSQL = strSQL.Remove(strSQL.Length - 1, 1); strSQL.Append(")"); OleDbCommand cmd = new OleDbCommand(strSQL.ToString(), con); cmd.ExecuteNonQuery(); //准备逐条插入数据 for (int j = i * pagecount; j < (i + 1) * pagecount; j++) { if (i == 0 || j < dt.Rows.Count) { StringBuilder tmp = new StringBuilder(); StringBuilder strfield = new StringBuilder(); StringBuilder strvalue = new StringBuilder(); for (int z = 0; z < dt.Columns.Count; z++) { strfield.Append("[" + dt.Columns[z].ColumnName + "]"); strvalue.Append("'" + dt.Rows[j][z].ToString() + "'"); if (z != dt.Columns.Count - 1) { strfield.Append(","); strvalue.Append(","); } else { } } cmd.CommandText = tmp.Append(" insert into [" + tabname + "]( ") .Append(strfield.ToString()) .Append(") values (").Append(strvalue).Append(")").ToString(); cmd.ExecuteNonQuery(); } } } } con.Close(); no = count; } Console.WriteLine("OK"); } catch (Exception ex) { Console.WriteLine(ex.Message); } GC.Collect(); }
相关文章推荐
- C#使用oledb方式将excel数据导入到datagridview后数据被截断为 255 个字符
- sl3中的DataGrid中的数据导出到Excel中 使用csv格式 解决中文是乱码的问题
- 解决C# 导出gridview中的数据到excel 时, 全数字时 0 被去掉的问题
- [原创]大量数据导出为Excel文件的问题解决(C#,ASP.NET)
- C#使用oledb导出数据到excel的方法
- java导出excel(解决导出几万条数据内存溢出的问题)
- C# 使用oledb导出excel,字段内容超长的解决方法
- 使用jxl导出大数据量EXCEL时内存溢出的解决办法
- 使用jxl导出大数据量EXCEL时内存溢出的解决办法
- c#中使用npoi将datagridview中的全部数据导出到excel中去
- OLEDB方式操作规则EXCEL的字符串的完整写法(解决标题行和列数据类型不一致的问题)
- 【推荐】.NET使用NPOI组件将数据导出Excel
- NET使用NPOI组件将数据导出Excel [转]
- POI : 解决大批量数据导出Excel产生内存溢出的方案
- Asp.net/c#+OleDb操作excel文件(二),数据传输使用Parameters
- GridView导出数据到excel数字变为科学记数法的问题的解决办法
- .net解决数据导出excel时的格式问题
- 【原创】C#导出数据到EXCEL方法谈(附实例源码和超级无敌详细讲解)
- .net解决数据导出excel时的格式问题
- 将GridView中的数据导出到Excel中下载并且解决乱码的问题