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);

        }



    }
}

 

转载于:https://www.cnblogs.com/yfl8910/p/3815384.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要将MySQL数据库中的导出CSV文件,你可以使用C#的MySQL Connector/NET库进行连接和查询,并使用逗号分隔的文本文件来保存结果。以下是一个示例代码: ```csharp using System; using System.Data; using System.IO; using MySql.Data.MySqlClient; class Program { static void Main() { string connectionString = "server=localhost;user=root;database=your_database;password=your_password"; // 创建连接对象 using (MySqlConnection connection = new MySqlConnection(connectionString)) { try { connection.Open(); // 查询语句 string query = "SELECT * FROM your_table"; // 创建适配器和数据对象 using (MySqlDataAdapter adapter = new MySqlDataAdapter(query, connection)) { DataTable dataTable = new DataTable(); // 使用适配器填充数据 adapter.Fill(dataTable); // 导出CSV文件 ExportToCsv(dataTable, "output.csv"); } } catch (Exception ex) { Console.WriteLine("Error: " + ex.Message); } } } static void ExportToCsv(DataTable dataTable, string filePath) { using (StreamWriter writer = new StreamWriter(filePath)) { // 写入列标题 foreach (DataColumn column in dataTable.Columns) { writer.Write(column.ColumnName + ","); } writer.WriteLine(); // 写入行数据 foreach (DataRow row in dataTable.Rows) { foreach (var item in row.ItemArray) { writer.Write(item.ToString() + ","); } writer.WriteLine(); } } Console.WriteLine("导出成功!"); } } ``` 请确保你已经安装了MySQL Connector/NET库,并在代码中引用了正确的命名空间。同时,请将 `your_database` 替换为你要导出数据库名称,`your_table` 替换为你要导出名称,以及提供正确的数据库连接参数。在 `ExportToCsv` 方法中,我们将数据的列标题和行数据写入到CSV文件中。 运行代码后,数据将被导出到名为 `output.csv` 的文件中。你可以根据需要修改文件路径和名称。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值