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

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

     在导出大量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 = 0; i < reader.FieldCount; i++)
                        {
                            if (i > 0)
                                writer.Write(',');
                            writer.Write(reader.GetName(i) );
                        }
                        writer.Write(Environment.NewLine);

                        while (reader.Read())
                        {
                            for (int i = 0; i < reader.FieldCount; i++)
                            {
                                if (i > 0)
                                    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 / 1000);

        }



    }
}

 

目录
相关文章
|
26天前
|
SQL 缓存 PHP
PHP技术探究:优化数据库查询效率的实用方法
本文将深入探讨PHP中优化数据库查询效率的实用方法,包括索引优化、SQL语句优化以及缓存机制的应用。通过合理的优化策略和技巧,可以显著提升系统性能,提高用户体验,是PHP开发者不容忽视的重要议题。
|
29天前
|
Java 调度 C#
C#学习系列相关之多线程(一)----常用多线程方法总结
C#学习系列相关之多线程(一)----常用多线程方法总结
|
29天前
|
C#
C#学习相关系列之数据类型类的三大特性(二)
C#学习相关系列之数据类型类的三大特性(二)
|
29天前
|
C#
C#学习相关系列之数组---常用方法使用(二)
C#学习相关系列之数组---常用方法使用(二)
|
27天前
|
SQL 关系型数据库 MySQL
|
22天前
|
存储 SQL 数据库
C# 将 Word 转文本存储到数据库并进行管理
C# 将 Word 转文本存储到数据库并进行管理
|
22天前
|
SQL C# 数据库
C# 读取多条数据记录导出到 Word 标签模板
C# 读取多条数据记录导出到 Word 标签模板
|
26天前
|
C#
深入C#中的String类
深入C#中的String类
7 0
|
27天前
|
Oracle Java 关系型数据库
java实现遍历树形菜单方法——数据库表的创建
java实现遍历树形菜单方法——数据库表的创建
11 0
|
29天前
|
C#
C#学习系列相关之多线程(二)----Thread类介绍
C#学习系列相关之多线程(二)----Thread类介绍