跳至页脚内容
使用 IRONXL

如何在 C# 中将 CSV 文件读取到 DataTable

处理CSV文件是.NET开发人员常见的任务,无论您是导入销售报告、处理库存还是同步客户记录。 将CSV文件转换为DataTable可以轻松进行操控、分析或插入到数据库表中。

在C#中读取CSV文件可能很棘手,大文件、不同分隔符或嵌入的逗号通常需要复杂的解析或使用Excel。 IronXL简化了这一过程:只需几行代码,您就可以从任何文件路径读取CSV文件,将其转换为具有正确列头的DataTable,并准备进行批量数据库操作——这一切都无需Excel。

在本指南中,您将学习如何:

  • 在C#中将CSV文件加载到DataTable中
  • 处理不同的分隔符,如逗号、制表符或分号
  • 高效地直接将DataTable导入到SQL Server中
  • 可靠地管理大数据集而不会遇到内存问题

最后,您将拥有一套完整、实用的工作流程,可以在您的.NET应用程序中使用IronXL将CSV数据转化为可行的信息。

为什么CSV到DataTable的转换必不可少?

CSV到DataTable的转换允许开发人员将逗号分隔值(CSV数据)转换为像DataTable这样的结构化对象以便进一步处理。 无论您是处理库存数据、客户记录还是交易日志,高效地将CSV转换为新的DataTable是至关重要的。 使用第一行作为列头,您可以确保DataTable的列与数据库表架构对齐。

传统方法通常在处理大文件、不同分隔符或内存管理时遇到困难。 IronXL消除了这些挑战,轻松处理不同的分隔符、引号字段和嵌入逗号。 IronXL的CSV读取能力消除了这些常见的痛点。

如何安装IronXL?

安装IronXL只需简单的NuGet包安装即可开始。 在Visual Studio中打开NuGet包管理器控制台并执行:

Install-Package IronXL.Excel

安装完成后,将IronXL命名空间添加到您的项目中:

using IronXL;
using System.Data;
using IronXL;
using System.Data;
Imports IronXL
Imports System.Data
$vbLabelText   $csharpLabel

这提供了对所有强大的CSV处理能力的访问,而无需任何Excel依赖。 有关IronXL广泛API的更多详细信息,请参阅API参考文档

NuGet 使用 NuGet 安装

PM >  Install-Package IronXL.Excel

IronXL 上查看 NuGet 快速安装。超过 1000 万次下载,它正以 C# 改变 PDF 开发。 您也可以下载 DLL

如何将CSV转换为DataTable?

IronXL的美丽之处在于它的简单性。 以下是如何读取CSV文件并转换为DataTable:

// Load CSV file into a WorkBook object
WorkBook workbook = WorkBook.LoadCSV("sales_data.csv", 
    fileFormat: ExcelFileFormat.XLSX);
// Access the default worksheet
WorkSheet worksheet = workbook.DefaultWorkSheet;
// Convert to DataTable with headers
DataTable dataTable = worksheet.ToDataTable(true);
// Display the data
foreach (DataRow row in dataTable.Rows)
{
    foreach (var item in row.ItemArray)
    {
        Console.Write($"{item}\t");
    }
    Console.WriteLine();
}
// Load CSV file into a WorkBook object
WorkBook workbook = WorkBook.LoadCSV("sales_data.csv", 
    fileFormat: ExcelFileFormat.XLSX);
// Access the default worksheet
WorkSheet worksheet = workbook.DefaultWorkSheet;
// Convert to DataTable with headers
DataTable dataTable = worksheet.ToDataTable(true);
// Display the data
foreach (DataRow row in dataTable.Rows)
{
    foreach (var item in row.ItemArray)
    {
        Console.Write($"{item}\t");
    }
    Console.WriteLine();
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

LoadCSV方法智能解析您的CSV文件,自动处理常见情况,如引号字段和嵌入逗号。 fileFormat参数告诉IronXL在内部如何解释CSV数据,确保其被视为Excel兼容的结构。 加载完成后,ToDataTable(true)方法将工作表转换为DataTable,其中参数true指示第一行应用作列头。 这将产生一个干净、结构化的具有与CSV头匹配的命名列的DataTable。 有关更高级的操作选项,请探索完整的Excel到DataTable教程

如何将DataTable导入SQL Server?

得到了您的数据表后,使用SqlBulkCopy将其导入到SQL Server中变得异常高效:

using System.Data;
using Microsoft.Data.SqlClient;
using IronXL;
class Program
{
    static void Main(string[] args)
    {
        // Create connection string
        string connectionString = @"Data Source=localhost;Initial Catalog=SalesDB;
                           Integrated Security=True;TrustServerCertificate=True;";
        // Read CSV into DataTable
        WorkBook workbook = WorkBook.LoadCSV("inventory_report.csv");
        DataTable dataTable = workbook.DefaultWorkSheet.ToDataTable(true);
        // Bulk insert into SQL Server
        using (SqlConnection connection = new SqlConnection(connectionString))
        {
            connection.Open();
            using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connection))
            {
                // Set destination table name
                bulkCopy.DestinationTableName = "dbo.Inventory";
                // Map DataTable columns to SQL table columns
                bulkCopy.ColumnMappings.Add("ProductCode", "product_code");
                bulkCopy.ColumnMappings.Add("Quantity", "quantity");
                bulkCopy.ColumnMappings.Add("LastUpdated", "last_updated");
                // Set batch size for better performance
                bulkCopy.BatchSize = 1000;
                // Write data to SQL Server
                bulkCopy.WriteToServer(dataTable);
            }
        }
        Console.WriteLine($"Successfully imported {dataTable.Rows.Count} records");
    }
}
using System.Data;
using Microsoft.Data.SqlClient;
using IronXL;
class Program
{
    static void Main(string[] args)
    {
        // Create connection string
        string connectionString = @"Data Source=localhost;Initial Catalog=SalesDB;
                           Integrated Security=True;TrustServerCertificate=True;";
        // Read CSV into DataTable
        WorkBook workbook = WorkBook.LoadCSV("inventory_report.csv");
        DataTable dataTable = workbook.DefaultWorkSheet.ToDataTable(true);
        // Bulk insert into SQL Server
        using (SqlConnection connection = new SqlConnection(connectionString))
        {
            connection.Open();
            using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connection))
            {
                // Set destination table name
                bulkCopy.DestinationTableName = "dbo.Inventory";
                // Map DataTable columns to SQL table columns
                bulkCopy.ColumnMappings.Add("ProductCode", "product_code");
                bulkCopy.ColumnMappings.Add("Quantity", "quantity");
                bulkCopy.ColumnMappings.Add("LastUpdated", "last_updated");
                // Set batch size for better performance
                bulkCopy.BatchSize = 1000;
                // Write data to SQL Server
                bulkCopy.WriteToServer(dataTable);
            }
        }
        Console.WriteLine($"Successfully imported {dataTable.Rows.Count} records");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

SqlBulkCopy类为大规模数据导入提供了卓越的性能。 ColumnMappings集合允许您将DataTable列映射到具有不同名称的数据库列,确保您的数据架构的灵活性。 BatchSize属性通过分块处理记录而非一次加载所有内容来优化内存使用。 这种方法可以高效处理数百万条记录,非常适合企业级数据操作。 了解更多有关IronXL的DataSet和DataTable功能

输出

这里,我们可以在SSMS中使用查询*SELECT FROM dbo.Inventory;**来检查我们的CSV数据实际上已导入到SQL Server中。 首先,让我们看一下我们在示例CSV文件中使用的数据:

如何将CSV文件读入C#中的DataTable:图2 - 示例CSV数据

现在,如果查看我们的查询输出,我们可以看到它已成功将每一列、标题和行复制到数据库表中。

如何将CSV文件读入C#中的DataTable:图3 - 显示导入记录的数据库视图

如何处理不同的分隔符?

并非所有CSV文件都使用逗号。 IronXL无缝处理各种分隔符:

using IronXL;
using System;
using System.Data;
using System.IO;
class Program
{
    static void Main()
    {
        // --- Tab-delimited file ---
        string tsvPath = @"export_data.tsv";
        WorkBook tsvWorkbook = WorkBook.LoadCSV(tsvPath, ExcelFileFormat.XLSX, "\t");
        // --- Semicolon-delimited file ---
        string semiPath = @"european_data.csv";
        string tempCsv = Path.Combine(Path.GetTempPath(), "european_data_comma.csv");
        // Replace semicolons with commas for proper parsing
        var lines = File.ReadAllLines(semiPath);
        for (int i = 0; i < lines.Length; i++)
        {
            lines[i] = lines[i].Replace(';', ',');
        }
        File.WriteAllLines(tempCsv, lines);
        WorkBook semiWorkbook = WorkBook.LoadCSV(tempCsv, ExcelFileFormat.XLSX);
        // Print both workbooks
        PrintWorkbook(tsvWorkbook, "Tab-delimited File");
        PrintWorkbook(semiWorkbook, "Semicolon-delimited File");
    }
    static void PrintWorkbook(WorkBook workbook, string name)
    {
        Console.WriteLine($"\n--- {name} ---\n");
        DataTable dt = workbook.DefaultWorkSheet.ToDataTable(true);
        // Print column headers
        foreach (DataColumn col in dt.Columns)
        {
            Console.Write($"{col.ColumnName}\t");
        }
        Console.WriteLine();
        // Print rows
        foreach (DataRow row in dt.Rows)
        {
            foreach (var item in row.ItemArray)
            {
                Console.Write($"{item}\t");
            }
            Console.WriteLine();
        }
    }
}
using IronXL;
using System;
using System.Data;
using System.IO;
class Program
{
    static void Main()
    {
        // --- Tab-delimited file ---
        string tsvPath = @"export_data.tsv";
        WorkBook tsvWorkbook = WorkBook.LoadCSV(tsvPath, ExcelFileFormat.XLSX, "\t");
        // --- Semicolon-delimited file ---
        string semiPath = @"european_data.csv";
        string tempCsv = Path.Combine(Path.GetTempPath(), "european_data_comma.csv");
        // Replace semicolons with commas for proper parsing
        var lines = File.ReadAllLines(semiPath);
        for (int i = 0; i < lines.Length; i++)
        {
            lines[i] = lines[i].Replace(';', ',');
        }
        File.WriteAllLines(tempCsv, lines);
        WorkBook semiWorkbook = WorkBook.LoadCSV(tempCsv, ExcelFileFormat.XLSX);
        // Print both workbooks
        PrintWorkbook(tsvWorkbook, "Tab-delimited File");
        PrintWorkbook(semiWorkbook, "Semicolon-delimited File");
    }
    static void PrintWorkbook(WorkBook workbook, string name)
    {
        Console.WriteLine($"\n--- {name} ---\n");
        DataTable dt = workbook.DefaultWorkSheet.ToDataTable(true);
        // Print column headers
        foreach (DataColumn col in dt.Columns)
        {
            Console.Write($"{col.ColumnName}\t");
        }
        Console.WriteLine();
        // Print rows
        foreach (DataRow row in dt.Rows)
        {
            foreach (var item in row.ItemArray)
            {
                Console.Write($"{item}\t");
            }
            Console.WriteLine();
        }
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

此代码将具有不同分隔符的CSV文件加载到IronXL WorkBook对象中。 制表符分隔的文件使用"\t"作为分隔符读取,而分号分隔的文件在加载之前转换为标准CSV格式。 每个工作簿的默认工作表使用ToDataTable(true)方法转换为DataTable,其中使用第一行作为列头。

然后PrintWorkbook方法遍历DataTable并在控制台中显示数据,包括标题和所有行。 这种灵活性解决了许多开发者讨论的常见CSV解析挑战

输出

正如您所见,我们的控制台输出中,两个文件尽管开始使用不同的分隔符,均被正确格式化成数据表。

如何将CSV文件读入C#中的DataTable:图4 - 不同分隔符输出

结论

IronXL将CSV数据库导入的复杂任务转化为直观、可靠的过程。 只需几行代码,您就可以:

  • 从任何文件路径读取CSV文件
  • 将CSV数据转换为新的DataTable
  • 保留列头和DataTable列
  • 高效地将数百万行导入到数据库表中

该库自动处理CSV解析、内存管理和数据类型转换的复杂性,让您专注于业务逻辑而不是文件处理细节。

准备好简化您的数据导入工作流程了吗? 开始您的免费试用以找到适合您团队需求的完美解决方案。

常见问题解答

在 C# 中将 CSV 文件读取到 DataTable 的最佳方法是什么?

使用 IronXL,您可以参照我们的开发者指南中的简单代码示例,轻松地将 CSV 文件读取到 C# 中的 DataTable。

为什么我应该使用 IronXL 进行 CSV 到 DataTable 转换?

IronXL 提供简单明了的 API 用于解析 CSV 文件并将其转换为 DataTable,使您可以轻松在 C# 中操作和分析数据。

IronXL 在转换为 DataTable 时能处理大规模的 CSV 文件吗?

是的,IronXL 旨在高效处理大型 CSV 文件并将其转换为 DataTable,而不会出现性能问题。

IronXL 是否支持在将 CSV 转换为 DataTable 后进行数据操作?

当然,一旦您使用 IronXL 将 CSV 文件转换为 DataTable,您可以根据需要轻松操作和分析数据。

我如何使用 IronXL 将 CSV 数据导入到数据库中?

在使用 IronXL 将您的 CSV 文件转换为 DataTable 后,您可以使用 C# 中的标准数据库连接将数据插入到数据库中。

IronXL 适合在企业应用程序中处理 CSV 文件吗?

是的,IronXL 旨在处理企业应用程序中的 CSV 处理任务,提供强大的性能和可靠性。

将 CSV 文件转换为 C# 中的 DataTable 的优势是什么?

将 CSV 文件转换为 DataTable 可以更轻松地进行数据操作、分析和与数据库集成,从而增强您的应用程序的数据处理能力。

除了 CSV 之外,IronXL 能否用于其他电子表格文件类型?

是的,IronXL 支持包括 Excel 格式在内的各种电子表格文件类型,使其在 C# 中具有多功能的数据处理能力。

Curtis Chau
技术作家

Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。

除了开发之外,Curtis 对物联网 (IoT) 有浓厚的兴趣,探索将硬件和软件集成的新方法。在空闲时间,他喜欢玩游戏和构建 Discord 机器人,将他对技术的热爱与创造力相结合。