在导出大量CSV数据的时候,常常体积较大,采用C#自带的压缩类,可以方便的实现该功能,并且压缩比例很高,该方法在我的开源工具DataPie中已经经过实践检验。我的上一篇博客《功能齐全、效率一流的免费开源数据库导入导出工具(c#开发,支持SQL server、SQLite、ACCESS三种数据库),每月借此处理数据5G以上》中有该工具的完整源码,有需要的同学可以看看。

在.net 4.5中,可以轻松创建zip文件 ,首先需要引入 System.IO.Compression.dll、System.IO.Compression.FileSystem.dll两个文件。其中ZipArchive 类表示一些压缩使用 Zip 文件格式的文件。ZipArchiveEntry 类表示单个 ZipArchive。ZipArchive 通常包含一个或多个 ZipArchiveEntry 实例。

DataPie中实现csv文件压缩导出的主要代码如下:

using System;
using System.Linq;
using System.Text;
using System.IO.Compression;
using System.Data;
using System.Diagnostics;
using System.IO; namespace DataPie.Core
{
public class DBToZip
{ public static int DataReaderToZip(String zipFileName, IDataReader reader, string tablename)
{
Stopwatch watch = Stopwatch.StartNew();
watch.Start();
using (FileStream fsOutput = new FileStream(zipFileName, FileMode.OpenOrCreate, FileAccess.ReadWrite))
{
using (ZipArchive archive = new ZipArchive(fsOutput, ZipArchiveMode.Update))
{
ZipArchiveEntry readmeEntry = archive.CreateEntry(tablename + ".csv");
using (StreamWriter writer = new StreamWriter(readmeEntry.Open(), Encoding.UTF8))
{
for (int i = ; i < reader.FieldCount; i++)
{
if (i > )
writer.Write(',');
writer.Write(reader.GetName(i) );
}
writer.Write(Environment.NewLine); while (reader.Read())
{
for (int i = ; i < reader.FieldCount; i++)
{
if (i > )
writer.Write(',');
String v = reader[i].ToString();
if (v.Contains(',') || v.Contains('\n') || v.Contains('\r') || v.Contains('"'))
{
writer.Write('"');
writer.Write(v.Replace("\"", "\"\""));
writer.Write('"');
}
else
{
writer.Write(v);
}
}
writer.Write(Environment.NewLine);
} }
} }
watch.Stop();
return Convert.ToInt32(watch.ElapsedMilliseconds / ); } }
}

c#自带压缩类实现数据库表导出到CSV压缩文件的方法的更多相关文章

  1. c#自带压缩类实现数据库表导出到CSV压缩文件

    c#自带压缩类实现数据库表导出到CSV压缩文件的方法 在导出大量CSV数据的时候,常常体积较大,采用C#自带的压缩类,可以方便的实现该功能,并且压缩比例很高,该方法在我的开源工具DataPie中已经经 ...

  2. Activiti 5.17 实体对象与类和数据库表的映射

    一.Activiti 5.17 mybatis的mapping文件声明映射的实体对象关系. <configuration><settings><settingname=& ...

  3. 03HibernateJAVA类与数据库表映射配置

    HibernateJAVA类与数据库表映射配置

  4. Shell脚本实现DB2数据库表导出到文件

    该Shell脚本用于实现将DB2数据库表导出到文件,将在另一篇博文<Java代码调用Shell脚本并传入参数实现DB2数据库表导出到文件>中通过Java代码实现调用该脚本并传入参数. #! ...

  5. Java代码调用Shell脚本并传入参数实现DB2数据库表导出到文件

    本文通过Java代码调用Shell脚本并传入参数实现DB2数据库表导出到文件,代码如下: import java.io.File; import java.io.IOException; import ...

  6. 将Mysql的一张表导出至Excel格式文件

    将Mysql的一张表导出至Excel格式文件 导出语句 进入mysql数据库,输入如下sql语句: select id, name, age from tablename into outfile ' ...

  7. 导出OpenID为txt文件的方法

    导出OpenID为txt文件的方法 public function export(){ $shop = M("Shop"); $arr = $shop->field('ope ...

  8. EXP直接导出压缩问津,IMP直接导入压缩文件的方法

    在10G之前,甚至在10G的Oracle环境中,有很多数据量不大,重要性不太高的系统依然采用EXP/IMP逻辑导出备份方式,或者,作为辅助备份方式. 通常情况下,我们都是这样操作的:1.exp导出2. ...

  9. oracle数据库表导出

    寻找一个测试table,清空,将需要导出的表导入表中的任意一列,写导出语句,导出. EXPDP USERID='user/account@orcl11 as sysdba' schemas=temp ...

随机推荐

  1. 【转】C#类的分类(静态类、实例类、嵌套类、结构、简单的抽象类、简单的密封类)

    静态类 -------------------------------------------------------------------------------- 静态类就是在class关键字前 ...

  2. java中的synchronized关键字

    参考:http://www.cnblogs.com/devinzhang/archive/2011/12/14/2287675.html 多线程并发问题的根因: 在一个对象中有一个变量i=0,有两个线 ...

  3. 用CSS和第三方库来提升图片浏览体验

    你是否关注过浏览.点击图片这个微妙的过程,不同的图片展现.交互方式各带来什么样的观感?本文聚焦于图片浏览这个过程以及如何使用CSS3和第三方库来提升体验. 先看下Pinterest.Flickr等时下 ...

  4. PyQt 5.2 发布,此版本完全支持Qtv5.2.0

    PyQt 5.2 发布,此版本完全支持Qtv5.2.0 :包括了新的 QtBluetooth,QtPositioning,QtMacExtras,QtWinExtras 和 Qt11Extras 模板 ...

  5. 《WPF程序设计指南》读书笔记——第3章 内容的概念

    1.Content属性及字体相关的属性 using System; using System.Windows; using System.Windows.Media; namespace LY.Dis ...

  6. 给UITextField左侧加一个小图标

    xcode 6.1 File-New-Project.. iOs-Application-Simple View Application 1.写一个自定义JSTextField类,继承UITextFi ...

  7. Oracle中正则表达式的使用

    Oracle10开始支持正则表达式. ORACLE中的支持正则表达式的函数主要有下面四个: 1. REGEXP_LIKE :          与LIKE的功能相似 2. REGEXP_INSTR : ...

  8. linux驱动系列之makefile

    在linux环境下做嵌入式无论是编写应用程序还是驱动程序等等,都需要用make来进行程序的编译,就需要学会自己编写Makefile.Makefile主要的作用有3点:1.决定编译哪些文件 2.怎样编译 ...

  9. 让<未将对象引用到实例>见鬼去吧!

    未将对象引用到实例,即NullReferenceException异常,我相信这是c#编程中最常见的错误之一,至少我在做项目的过程中,有很多时候都会抛出这个异常.每当这个异常出现的时候,我都会头皮一紧 ...

  10. php如何查找会员无限分类的所有上级和所有下级

    a推广出的a-1,a-2继续推广,得到a-1-1,a-1-2等等数据库设计思路如下:用户表中有一个son这么一个字段,这个字段中存放名下所有会员的id,用分号隔开.这个字段的维护:比如a-1-1推广出 ...