原创 Datareader 导出为csv文件方法
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文件方法的更多相关文章
- oracle导出多CSV文件的靠谱的
oracle导出多CSV文件的问题 ---------------------------------------------------------------------- 用ksh脚本从orac ...
- java导出生成csv文件
首先我们需要对csv文件有基础的认识,csv文件类似excel,可以使用excel打开,但是csv文件的本质是逗号分隔的,对比如下图: txt中显示: 修改文件后缀为csv后显示如下: 在java中我 ...
- 淘宝助理导出的csv文件使用的是什么编码,您猜?
今天下午用Java读取从淘宝助理 V4.3 Beta1导出的csv文件,出现中文乱码情况. 一看就是文件编码引起的,不清楚淘宝助理导出的csv文件使用了什么编码,到百度搜索了一下,看到一些相关文章,但 ...
- R: 导入 csv 文件,导出到csv文件,;绘图后导出为图片、pdf等
################################################### 问题:导入 csv 文件 如何从csv文件中导入数据,?参数怎么设置?常用参数模板是啥? 解决方 ...
- 如何从sql server导出到csv文件
如何从sql server导出到csv文件,具体代码如下: private static void WriteHeader(SqlDataReader reader, TextWriter outpu ...
- 导出excel、word、csv文件方法汇总
http://www.woaic.com/2012/06/64 excel文件主要是输出html代码.以xls的文本格式保存文件. 生成excel格式的代码: /// <summary> ...
- es实战之数据导出成csv文件
从es将数据导出分两步: 查询大量数据 将数据生成文件并下载 本篇主要是将第二步,第一步在<es实战之查询大量数据>中已讲述. csv vs excel excel2003不能超过6553 ...
- Java列表分页查询结果导出到CSV文件,导入CSV文件并解析
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.Fi ...
- 导出到CSV文件
一.手工导出导出 1.winform void DataGridViewToExcel(DataGridView dataGridView1) { SaveFileDialog saveFileDia ...
随机推荐
- Java 的replace和replaceAll的使用
(1)replace() 方法通过用 newChar 字符替换字符串中出现的所有 oldChar 字符,并返回替换后的新字符串. public String replace(char oldChar, ...
- chVsprintf
#if LINUX_SYSTEM int chVsprintf(LPSTR buffer, int nCount, LPCSTR format, va_list argptr) { return vs ...
- oracle启动脚本 .
.#!/bin/bash set -x su -oracle >>EON lsnrctl start sqlplus /nolog >>EOF conn / as sy ...
- Spark RDD aggregateByKey
aggregateByKey 这个RDD有点繁琐,整理一下使用示例,供参考 直接上代码 import org.apache.spark.rdd.RDD import org.apache.spark. ...
- 修改 TeamViewer ID方法
修改 TeamViewer ID 的方法: 1. 开始 > 运行,录入%appdata%,删除TeamViewer的文件夹:2. 开始 > 运行,录入regedit: 删除 HKEY ...
- 用grunt进行前端工程化之路
我们的项目wecash4.0的前端构建考虑过用fis和grunt. 目录: 前期调研:fis vs grunt vs gulp? 一.安装grunt和项目. fis是百度fex研发的构建工具,非常方便 ...
- Thinkphp去掉index.php
1.httpd.conf配置文件中 #LoadModule rewrite_module modules/mod_rewrite.so 把前面的警号去掉2.AllowOverride None 将No ...
- Maven插件之maven-archetype-plugin
Maven插件之maven-archetype-plugin 时间:2014-03-29 学过Maven的人,都知道用MyEclipse的Maven插件生成一个项目骨架,比如maven-archety ...
- 数据库(SQL SERVER)常用知识点
1,连接数据库字符串 Data Source=192.168.1.249;Initial Catalog=bbx_uf_jiekou;User ID=sa;Password=123 Data Sour ...
- hdu 1142(DFS+dijkstra)
#include<iostream> #include<cstdio> #include<cmath> #include<map> #include&l ...