DataReader 是游标只读数据, 如果是大数据导出,用Datatable 将耗费巨大内存资源。因为Datatable 其实就是内存中的一个数据表

代码如下

/// <summary>
/// SqlDataReader 生成csv文件
/// </summary>
/// <param name="fileNameCsv">文件名(包含文件路径)</param>
/// <param name="dr">数据表</param>
/// <param name="hideColumnNames">要隐藏的列名</param>
/// <param name="encoding">编码【默认:GB2312】</param>
/// <returns></returns>
protected static void DownloadCsv(string fileNameCsv, string fileNameZip, SqlDataReader dr, string[] hideColumnNames, string encoding="gb2312")
{
if (dr != null)
{
try
{
Dictionary<string, string> hideCol = new Dictionary<string, string>();
foreach (string item in hideColumnNames)
{
hideCol.Add(item.Trim(), item);
} if (!File.Exists(fileNameCsv))
{
using (StreamWriter sw = new StreamWriter(fileNameCsv, false, Encoding.GetEncoding(encoding)))
{
string fieldName = string.Empty;
StringBuilder sb = new StringBuilder();
//写入表头
for (int i = 0; i < dr.FieldCount; i++)
{
fieldName = dr.GetName(i);
if (hideCol.ContainsKey(fieldName) == true || fieldName == "")
continue;
else
{
sb.Append(fieldName);
sb.Append(","); }
}
sw.WriteLine(sb.ToString().TrimEnd(','));
sb.Clear();
//写入导出数据
while (dr.Read())
{
//遍历每一列
for (int i = 0; i < dr.FieldCount; i++)
{
fieldName = dr.GetName(i);
if (hideCol.ContainsKey(fieldName) == true || fieldName == "")
continue;
else
{
if (!Convert.IsDBNull(dr[i]))
{
string content = string.Format("\"{0}\"", dr[i].ToString().Replace("\"", "\"\""));
sb.Append(content);
}
else
{
sb.Append("\"\"");
}
sb.Append(","); }
}
sw.WriteLine(sb.ToString().TrimEnd(','));
sb.Clear();//每行数据结束清空已经写入文本的数据
}
}
}
dr.Close();
string filePath = fileNameCsv.Substring(0, fileNameCsv.LastIndexOf(@"\")+1);//+1 包含最后一个斜杠
CreateZipFile(filePath, fileNameZip);//创建压缩文件
}
catch(Exception ex)
{
if(!dr.IsClosed)
{
dr.Close();
}
LogHelper.WriteErrorLog("ProcessDocument.DownloadCsv", ex.Message);
}
}
}

  

原创 Datareader 导出为csv文件方法的更多相关文章

  1. oracle导出多CSV文件的靠谱的

    oracle导出多CSV文件的问题 ---------------------------------------------------------------------- 用ksh脚本从orac ...

  2. java导出生成csv文件

    首先我们需要对csv文件有基础的认识,csv文件类似excel,可以使用excel打开,但是csv文件的本质是逗号分隔的,对比如下图: txt中显示: 修改文件后缀为csv后显示如下: 在java中我 ...

  3. 淘宝助理导出的csv文件使用的是什么编码,您猜?

    今天下午用Java读取从淘宝助理 V4.3 Beta1导出的csv文件,出现中文乱码情况. 一看就是文件编码引起的,不清楚淘宝助理导出的csv文件使用了什么编码,到百度搜索了一下,看到一些相关文章,但 ...

  4. R: 导入 csv 文件,导出到csv文件,;绘图后导出为图片、pdf等

    ################################################### 问题:导入 csv 文件 如何从csv文件中导入数据,?参数怎么设置?常用参数模板是啥? 解决方 ...

  5. 如何从sql server导出到csv文件

    如何从sql server导出到csv文件,具体代码如下: private static void WriteHeader(SqlDataReader reader, TextWriter outpu ...

  6. 导出excel、word、csv文件方法汇总

    http://www.woaic.com/2012/06/64 excel文件主要是输出html代码.以xls的文本格式保存文件. 生成excel格式的代码: /// <summary> ...

  7. es实战之数据导出成csv文件

    从es将数据导出分两步: 查询大量数据 将数据生成文件并下载 本篇主要是将第二步,第一步在<es实战之查询大量数据>中已讲述. csv vs excel excel2003不能超过6553 ...

  8. Java列表分页查询结果导出到CSV文件,导入CSV文件并解析

    import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.Fi ...

  9. 导出到CSV文件

    一.手工导出导出 1.winform void DataGridViewToExcel(DataGridView dataGridView1) { SaveFileDialog saveFileDia ...

随机推荐

  1. TCP发消息续传文件

    1.自定义固定协议头部.格式:([head][body][filestream]) /// <summary> /// 数据包头部 /// </summary> [Struct ...

  2. MAC 安装 Protobuf

    1.确认MAC装有g++.make.vim工具 2.安装make工具使用       brew install make 3.安装protobuf brew install protobuf 4.安装 ...

  3. Centos7 密码重置

    1.在grub启动页面,按e编辑启动选项 2.找到Linux 16的那一行,将ro改为rw init=/sysroot/bin/sh 3.按下 Control+x ,使用修改后的设置启动,出现命令行 ...

  4. Shell使用技巧

    巧用定界符delimiter 输入大段文本的地方 自动选择和输入的地方 访问数据库 Angel@DESKTOP-254LBLA ~ $ cat > out.txt << EOF &g ...

  5. final

    final的变量的值不能被改变.(包括形参) final的方法不能被重写. final的类不能被继承.

  6. git使用--git命令项目提交问题总结

    提交遇到Error  "remote ref does not exist"解决办法:git fetch -p MY_REMOTE    eg.    git fetch -p o ...

  7. Keep It Simple Stupid!

    Kelly Johnson提出了KISS原则.他是一个飞机工程师以及航空发明家,同时也是一个管理天才,他一生中主要设计了40多架飞机,获得的荣誉相当之多,总之,很牛. 这个原则是对Johnson带领的 ...

  8. Win7上的ASP.NET MVC3项目在Win10上运行的一个坑

    先解释一下问题:我原来的电脑环境是Win7+VS2015,因为新换了个电脑环境变成Win10+VS2015了,所以就把原先的项目复制到新的机器上,那么问题来了,原先的一个项目在VS2015上打开竟然直 ...

  9. mysql用户的创建

    MySQL是采用c/s方式的,需要客户端登录服务器,那么可以登录账号叫做用户,这些用户的信息都存储在mysql数据库(mysql安装时默认有的一个数据库)中的user表中, 比如用户的名称,用户的密码 ...

  10. C#语言基础— 输入与输出

    C#语言基础— 输入与输出 1.1函数的四要素:名称.输入.输出.加工 1.2主函数:输出语句.输入语句: Static viod Main(string[] stgs)//下划线部分可以自己指定 { ...