? ? ?
c#自帶壓縮類實現(xiàn)數(shù)據(jù)庫表導(dǎo)出到CSV壓縮文件的方法
在導(dǎo)出大量CSV數(shù)據(jù)的時候,常常體積較大,采用C#自帶的壓縮類,可以方便的實現(xiàn)該功能,并且壓縮比例很高,該方法在我的開源工具DataPie中已經(jīng)經(jīng)過實踐檢驗。我的上一篇博客《 功能齊全、效率一流的免費開源數(shù)據(jù)庫導(dǎo)入導(dǎo)出工具(c#開發(fā),支持SQL server、SQLite、ACCESS三種數(shù)據(jù)庫),每月借此處理數(shù)據(jù)5G以上 》中有該工具的完整源碼,有需要的同學(xué)可以看看。
?
? ? ?在.net 4.5中,可以輕松創(chuàng)建zip文件 ,首先需要引入?System.IO.Compression.dll、System.IO.Compression.FileSystem.dll兩個文件。其中ZipArchive 類表示一些壓縮使用 Zip 文件格式的文件。ZipArchiveEntry 類表示單個 ZipArchive。ZipArchive 通常包含一個或多個 ZipArchiveEntry 實例。
?
? ? ?DataPie中實現(xiàn)csv文件壓縮導(dǎo)出的主要代碼如下:
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); } } }
?
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
