原创 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文件方法

时间: 2024-10-01 06:33:50

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

oracle导出多CSV文件的靠谱的

oracle导出多CSV文件的问题 ---------------------------------------------------------------------- 用ksh脚本从oracle数据库中导出80w数据到csv文件,如用户给定名字为a.csv(文件最大4000行记录),则自动生产文件为a_1.csv,a_2.csv,...., a_200.csv 我已经实现了一个方法,但80w要导5小时,用户没法接受.如下: sqlplus -s user/pwd @${SqlDir}/

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

今天下午用Java读取从淘宝助理 V4.3 Beta1导出的csv文件,出现中文乱码情况. 一看就是文件编码引起的,不清楚淘宝助理导出的csv文件使用了什么编码,到百度搜索了一下,看到一些相关文章,但测试发现都没有解决这个问题. 最后,我抱着试试看的态度,使用了 utf-16 ,我晕,正常显示中文了. 关于 utf-16 这种编码,这么多看来我还是第一次使用,之前最常用的是 gb2312 和 utf-8 之间的转换. 下面是一个简单的例子: try { DataInputStream in =

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

################################################### 问题:导入 csv 文件 如何从csv文件中导入数据,?参数怎么设置?常用参数模板是啥? 解决方案: yuan <- read.csv(file = "C:/Users/Administrator/Desktop/test1.csv",header = TRUE,sep = ",",dec = ".", stringsAsFactors

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

从es将数据导出分两步: 查询大量数据 将数据生成文件并下载 本篇主要是将第二步,第一步在<es实战之查询大量数据>中已讲述. csv vs excel excel2003不能超过65536, excel2007及以上版本支持1048576条数据.excel支持的数据量有限,并且生生成文件的速度比较慢. csv具有支持写入量大,文件较小的优点. 故选择csv作为导出文件类型. 导出文件的几种方式: 将数据从es中查询出来,在这个大前提下,对比导出文件的速度. 由前端处理 直接将数据返回给前端,

Vue之将前端的筛选结果导出为csv文件

有导入就有导出哈!这里继导入之后记录一下导出的实现过程. 1.按钮部分: <el-button class="filter-item" style="margin-left: 10px;" type="success" native-type="submit" @click="exportAll()" icon="el-icon-plus"> 导出 </el-butto

oracle中把表导出为txt文件方法

本篇列举了几种把oracle 表中的数据导出成txt文件的方法,目前只列举了三种方式,如果后续发现更好的方法会持续添加进来. 1.plsqldev 里面有一个选项可以把表以execl格式到时 2.使用spool sqlplus / as sysdba set linesize 1000 set pagesize 0 set echo off set termout off set heading off set feedback off SET trims ON set term off SET

postgresql备份恢复数据库和批量导入导出数据到文件方法

备份数据库:pg_dump -h localhost -U root demo02 > /home/arno/dumps/demo02.bak 恢复数据库:psql -h localhost -U root -d demo <  demo.bak 备份表:pg_dump -h localhost -U root demo02 -t books > /home/arno/dumps/books.bak 恢复表:psql -h localhost -U root -d demo -t boo

Postgresql 将查询结果导出至csv文件

1.将查询结果导入某张表 create table file1( a integer, b character(5) ); insert into file1(a,b) select a,b from view 2.导出 导出之前为防止中文乱码,设置一下数据库编码 set client_encoding='GBK'; 使用copy 命令 执行命令copy file1to '/home/file.csv' with csv header;

将mysql中查询结果导出到csv文件

1.进入mysql:在cmd中输入mysql -u root -p,输入密码: 2.输入查询语句+"into outfile"+文件: select ip from iptable group by ip into outfile 'd:/ip.csv';