C#导出EXCEL超大数据源码,解决内存溢出问题,使用OLEDB方式(NPOI做不到)
来源:互联网 发布:库存查询软件 编辑:程序博客网 时间:2024/06/05 18:40
最近工作导数据失败,找问题原因:ORALCE导出数据,超出5w多条数据,由于数据量过大(加上列数多),无法导出。
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();}
阅读全文
0 0
- C#导出EXCEL超大数据源码,解决内存溢出问题,使用OLEDB方式(NPOI做不到)
- C# 使用NPOI 导出Excel
- C# EXCEL 导入导出类(OLEDB的方式)
- 使用npoi做excel导出真心方便
- C# 通过NPOI导入导出数据EXCEL
- 使用NPOI导入导出标准Excel(源码)
- 解决大批量数据导出Excel产生内存溢出的方案
- 解决大批量数据导出Excel产生内存溢出的方案
- 解决大批量数据导出Excel产生内存溢出的方案
- 解决大批量数据导出Excel产生内存溢出的方案
- 解决大批量数据导出Excel产生内存溢出的方案
- 解决大批量数据导出Excel产生内存溢出的方案
- 解决大批量数据导出Excel产生内存溢出的方案
- 解决POI大数据导出Excel内存溢出、应用假死
- 使用POI3.8导出大数据excel方法(解决内存溢出)
- C# 导出到Excel(NPOI的使用)
- C#初次使用NPOI导出Excel
- C# NPOI 导出excel
- GAN对抗网络相关资源
- 值得推荐的C/C++框架和库
- js使用过的正则表达式
- Centos安装Sublime text 3
- Object类—“==”对象不可能相等
- C#导出EXCEL超大数据源码,解决内存溢出问题,使用OLEDB方式(NPOI做不到)
- 现在我是菜鸟——第一行代码
- 【工作记录】入职两周状态记录
- 【CSP201709-5】除法
- IDEA中tomcat的配置
- java设计模式之桥接模式
- 老司机带你玩转linux(二)shell的设置以及新建用户
- eclipse alt+/智能提示错误:problems during content assist
- Could not find property 'outputFile' on com.android.build.gradle.internal.api.ApplicationVariantImpl