C#实现DataTable与CSV互转工具类

Theo
Theo
发布时间:2026-10-14| 3人浏览过
原创

在C#开发中,经常需要处理表格数据与文本文件之间的转换。本工具类提供了一套静态方法,用于实现System.Data.DataTable与CSV文件的双向转换,支持自定义表头设置,使用UTF-8编码以确保数据兼容性。

核心功能说明

该 CsvHelper 类主要包含两个静态方法,分别用于数据的导出和导入:

  • dt2csv:将内存中的 DataTable 数据写入指定路径的 CSV 文件。
  • csv2dt:读取指定路径的 CSV 文件,并将数据行追加到传入的 DataTable 实例中。

C# 代码实现

以下是完整的 C# 类代码。请注意,该类依赖 System.Data 和 System.IO 命名空间。在实际使用时,请确保引用了相应的程序集。

using System.Data;
using System.IO;
using System.Text;

namespace DotNet.Utilities
{
    /// <summary>
    /// CSV文件转换工具类
    /// </summary>
    public static class CsvHelper
    {
        /// <summary>
        /// 将DataTable导出为Csv文件
        /// </summary>
        /// <param name="dt">源DataTable</param>
        /// <param name="strFilePath">保存文件的物理路径</param>
        /// <param name="tableheader">第一行显示的表头信息(可选)</param>
        /// <param name="columname">第二行的字段标题,使用逗号分隔</param>
        /// <returns>操作成功返回true,失败返回false</returns>
        public static bool dt2csv(DataTable dt, string strFilePath, string tableheader, string columname)
        {
            try
            {
                // 使用UTF-8编码防止中文乱码
                using (StreamWriter strmWriter = new StreamWriter(strFilePath, false, Encoding.UTF8))
                {
                    // 写入自定义表头和列名
                    strmWriter.WriteLine(tableheader);
                    strmWriter.WriteLine(columname);

                    // 遍历DataTable的行
                    for (int i = 0; i < dt.Rows.Count; i++)
                    {
                        string strBufferLine = "";
                        // 遍历每一行的列
                        for (int j = 0; j < dt.Columns.Count; j++)
                        {
                            if (j > 0)
                            {
                                strBufferLine += ",";
                            }
                            // 处理空值情况
                            object val = dt.Rows[i][j];
                            strBufferLine += (val == null ? "" : val.ToString());
                        }
                        strmWriter.WriteLine(strBufferLine);
                    }
                }
                return true;
            }
            catch
            {
                return false;
            }
        }

        /// <summary>
        /// 将Csv文件内容读入DataTable
        /// </summary>
        /// <param name="filePath">Csv文件路径</param>
        /// <param name="n">跳过的行数索引,表示第n+1行开始为数据记录(前n行为标题等)</param>
        /// <param name="dt">用于接收数据的已定义结构的DataTable</param>
        /// <returns>填充后的DataTable</returns>
        public static DataTable csv2dt(string filePath, int n, DataTable dt)
        {
            using (StreamReader reader = new StreamReader(filePath, Encoding.UTF8, false))
            {
                int m = 0;
                while (!reader.EndOfStream)
                {
                    m++;
                    string line = reader.ReadLine();
                    // 跳过前n行(标题行),从第n+1行开始读取数据
                    if (m > n)
                    {
                        // 简单按逗号分割,实际复杂CSV可能需要解析引号包裹的字段
                        string[] split = line.Split(',');
                        if (split.Length > 0)
                        {
                            DataRow dr = dt.NewRow();
                            for (int i = 0; i < split.Length; i++)
                            {
                                if (i < dt.Columns.Count)
                                {
                                    dr[i] = split[i];
                                }
                            }
                            dt.Rows.Add(dr);
                        }
                    }
                }
            }
            return dt;
        }
    }
}

使用注意事项

  1. 数据结构匹配:调用 csv2dt 时,传入的 dt 参数必须已经定义好 Columns(列结构)。否则 dt.NewRow() 可能会报错或导致列索引越界。
  2. 编码格式:代码统一使用了 Encoding.UTF8。如果源CSV文件是GBK或其他编码,需在 StreamReader 构造函数中修改编码参数,否则可能出现乱码。
  3. 特殊字符处理:上述实现采用简单的 Split(',') 进行分割。如果CSV字段内容本身包含逗号且被双引号包裹,这种简单分割方式可能不准确,生产环境中建议使用成熟的CSV解析库(如 CsvHelper NuGet包)。
  4. 资源释放:示例代码中添加了 using 语句块来自动管理 StreamWriter 和 StreamReader 的资源释放,这比手动调用 Close() 更安全。

总结

这个C#类用于转换DataTable为CSV文件、CSV文件转换成DataTable,如果需要进行CSV和DataTable之间进行转换,使用这个类非常合适。希望本文所述的C#操作CSV文件的方法对大家的程序设计有所帮助。 以上就是C#实现DataTable与CSV互转工具类的详细内容,更多关于C# CSV文件操作的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。