zoukankan      html  css  js  c++  java
  • c#自带压缩类实现数据库表导出到CSV压缩文件

         

    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('
    ') || v.Contains('
    ') || 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);
    
            }
    
    
    
        }
    }
    复制代码
  • 相关阅读:
    Redis
    Redis
    Redis
    Redis
    Redis
    Redis
    Distributed
    Sentinel
    Archi
    Redis
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/3815735.html
Copyright © 2011-2022 走看看