跳過到頁腳內容
使用 IRONXL

如何將 CSV 文件讀入 DataTable 在 C#

處理 CSV 文件是 .NET 開發人員中常見的任務,無論是匯入銷售報告、處理庫存還是同步客戶記錄。 將 CSV 文件轉換為 DataTable 使其易於操作、分析或插入到資料庫表中。

在 C# 中讀取 CSV 文件可能很棘手,大文件、不同的分隔符或嵌入的逗號通常需要複雜的解析或 Excel。 IronXL簡化了這一過程:只需幾行代碼,您就可以從任何文件路徑讀取 CSV 文件,將其轉換為具有正確列標題的 DataTable 並準備進行大批量資料庫操作——無需 Excel。

在本指南中,您將學習如何:

  • 將 CSV 文件加載到 C# 中的 DataTable
  • 處理不同的分隔符,如逗號、制表符或分號
  • 高效地將 DataTable 直接匯入到 SQL Server
  • 可靠地管理大型數據集而不遇到記憶體問題

到最後,您將擁有一個完整的實用工作流程,使用 IronXL 在 .NET 應用程序中將 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

這樣就可以在無需任何 Excel 依賴的情況下訪問所有強大的 CSV 處理功能。 想了解更多有關 IronXL 廣泛 API 的詳情,請參考 API 參考文檔

NuGet 用 NuGet 安裝

PM >  Install-Package IronXL.Excel

NuGet 查看 https://www.nuget.org/packages/IronXL.Excel 以快速安裝。超過 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 指示應將第一行作為列標題。 這將得到一個乾淨、結構化的 DataTable,列的名稱與您的 CSV 標題一致。 欲了解更多高級操作選項,探索 完整的 Excel 到 DataTable 教程

如何將 DataTable 匯入到 SQL Server?

一旦擁有您的 Data Table,使用 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 功能

輸出

在此,我們可以使用查詢 *SELECT FROM dbo.Inventory;** 在 SSMS 中檢查我們的 CSV 數據是否實際匯入到 SQL Server 中。 首先,讓我們看看我們在示例 CSV 文件中使用的數據:

如何將 CSV 文件讀取到 DataTable 中:圖 2 - 示例 CSV 數據

現在,看看我們的查詢輸出的內容,我們可以看到它已成功將每一列、標題和行複製到資料庫表中。

如何將 CSV 文件讀取到 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 文件讀取到 DataTable 中:圖 4 - 不同分隔符輸出

結論

IronXL 將 CSV 資料庫匯入這一複雜的任務轉變為一個直觀可靠的過程。 只需幾行代碼,您就可以:

  • 從任何文件路徑讀取 CSV 文件
  • 將 CSV 數據轉換為新的 DataTable
  • 保留列標題和 DataTable 列
  • 高效地將數百萬行數據匯入到資料庫表中

該庫自動處理 CSV 解析、記憶體管理和數據類型轉換的複雜性,讓您專注於業務邏輯而不是文件處理細節。

準備好精簡您的數據匯入工作流程了嗎? 開始您的免費試用,為您的團隊找到完美的解決方案。

常見問題解答

在 C# 中讀取 CSV 文件進入 DataTable 的最佳方式是什麼?

使用 IronXL,您可以在 C# 中通過我們的開發者指南中提供的簡單代碼示例高效地將 CSV 文件讀入 DataTable。

為什麼應該使用 IronXL 進行 CSV 到 DataTable 的轉換?

IronXL 提供了一個簡單的 API 用於解析 CSV 文件並將其轉換為 DataTables,讓您輕鬆操作和分析 C# 中的數據。

IronXL 可以處理大型 CSV 文件轉換為 DataTables 嗎?

可以,IronXL 被設計為高效處理大型 CSV 文件並保持性能不受影響地轉換為 DataTables。

IronXL 是否支持在將 CSV 轉換為 DataTable 後進行數據操作?

當然,使用 IronXL 將 CSV 文件轉換為 DataTable 後,您可以根據需要輕鬆操作和分析數據。

如何使用 IronXL 將 CSV 數據導入數據庫?

將您的 CSV 文件轉換為 DataTable 後,您可以使用 C# 中的標準數據庫連接將數據插入數據庫。

IronXL 適合用於企業應用程序中的 CSV 文件處理嗎?

是的,IronXL 被設計為可以在企業應用程序中處理 CSV 任務,提供堅固的性能和可靠性。

在 C# 中將 CSV 文件轉換為 DataTables 的優勢是什麼?

將 CSV 文件轉換為 DataTables 讓數據操作、分析和與數據庫的集成更容易,提升應用程序的數據處理能力。

IronXL 可以用於 CSV 之外的其他電子表格文件類型嗎?

可以,IronXL 支持包括 Excel 格式在內的各種電子表格文件類型,從而在 C# 中實現多樣的數據處理功能。

Jordi Bardia
軟體工程師
Jordi 在 Python、C# 和 C++ 上最得心應手,當他不在 Iron Software 展現技術時,便在做遊戲編程。在分担产品测测试,产品开发和研究的责任时,Jordi 为持续的产品改进增值。他说这种多样化的经验使他受到挑战并保持参与, 而这也是他与 Iron Software 中工作一大乐趣。Jordi 在佛罗里达州迈阿密长大,曾在佛罗里达大学学习计算机科学和统计学。