如何在 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这提供了对所有强大的CSV处理能力的访问,而无需任何Excel依赖。 有关IronXL广泛API的更多详细信息,请参阅API参考文档。
如何将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.comLoadCSV方法智能解析您的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.comSqlBulkCopy类为大规模数据导入提供了卓越的性能。 ColumnMappings集合允许您将DataTable列映射到具有不同名称的数据库列,确保您的数据架构的灵活性。 BatchSize属性通过分块处理记录而非一次加载所有内容来优化内存使用。 这种方法可以高效处理数百万条记录,非常适合企业级数据操作。 了解更多有关IronXL的DataSet和DataTable功能。
输出
这里,我们可以在SSMS中使用查询*SELECT FROM dbo.Inventory;**来检查我们的CSV数据实际上已导入到SQL Server中。 首先,让我们看一下我们在示例CSV文件中使用的数据:

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

如何处理不同的分隔符?
并非所有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此代码将具有不同分隔符的CSV文件加载到IronXL WorkBook对象中。 制表符分隔的文件使用"\t"作为分隔符读取,而分号分隔的文件在加载之前转换为标准CSV格式。 每个工作簿的默认工作表使用ToDataTable(true)方法转换为DataTable,其中使用第一行作为列头。
然后PrintWorkbook方法遍历DataTable并在控制台中显示数据,包括标题和所有行。 这种灵活性解决了许多开发者讨论的常见CSV解析挑战。
输出
正如您所见,我们的控制台输出中,两个文件尽管开始使用不同的分隔符,均被正确格式化成数据表。

结论
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# 中具有多功能的数据处理能力。








