跳過到頁腳內容
使用 IRONXL

如何在 C# 中將 CSV 文件讀取到 DataTable

對於 .NET 開發人員來說,處理 CSV 檔案是一項常見的任務,無論是匯入銷售報告、處理庫存或同步客戶記錄。 將 CSV 檔案轉換為 DataTable 可以方便地進行操作、分析或插入資料庫表。

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

本指南將教您如何:

  • 將 CSV 檔案載入到 C# 中的 DataTable 中
  • 處理不同的分隔符,例如逗號、製表符或分號
  • 有效率地將資料表直接匯入 SQL Server
  • 可靠地管理大型資料集,而不會出現記憶體問題

最後,您將擁有一個完整的、實用的工作流程,可以使用 IronXL 在 .NET 應用程式中將 CSV 資料轉換為可操作的資訊。

為什麼CSV到DataTable的轉換至關重要?

CSV 轉 DataTable 轉換可讓開發人員將逗號分隔值(CSV 資料)轉換為結構化物件(如 DataTable),以便進行進一步處理。 無論您是處理庫存資料、客戶記錄還是交易日誌,能夠有效率地將 CSV 轉換為新的 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 參考文檔

!{--010011000100100101000010010100100100000101010010010110010101111101001110010101010101010101010101010101010101010 0100010111110100100101001101010100010000010100110001001100010111110100001001001100010011110010101010

如何將CSV檔案轉換為資料表?

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 標題相符的資料表。 如需了解更多進階操作選項,請瀏覽完整的 Excel 轉資料表教學

如何將資料表匯入 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 的資料集和資料表功能的資訊

輸出

在這裡,我們可以使用 SSMS 中的查詢*SELECT FROM dbo.Inventory;**來檢查我們的 CSV 資料是否實際匯入 SQL Server 中。 首先,讓我們來看看範例 CSV 檔案中使用的資料:

如何在 C# 中將 CSV 檔案讀入 DataTable:圖 2 - CSV 資料範例

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

如何在 C# 中將 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 解析難題

輸出

從我們的控制台輸出中可以看到,儘管兩個檔案最初使用不同的分隔符,但它們都已正確格式化為資料表。

如何在 C# 中將 CSV 檔案讀入 DataTable:圖 4 - 不同分隔符號的輸出

結論

IronXL 將複雜的 CSV 資料庫匯入任務轉換為簡單可靠的流程。 只需幾行程式碼,您就可以:

  • 從任意檔案路徑讀取 CSV 文件
  • 將 CSV 資料轉換為新的資料表
  • 保留列標題和資料表列
  • 有效率地將數百萬行資料匯入資料庫表

該程式庫會自動處理 CSV 解析、記憶體管理和資料類型轉換等複雜細節,讓您可以專注於業務邏輯,而不是檔案處理細節。

準備好簡化您的資料匯入工作流程了嗎? 立即開始免費試用,找到最適合您團隊需求的產品。

常見問題解答

在 C# 中將 CSV 檔案讀入 DataTable 的最佳方式是什麼?

使用 IronXL,您可以透過我們的開發人員指南中提供的簡單程式碼範例,在 C# 中有效率地將 CSV 檔案讀取至 DataTable。

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

IronXL 提供了直接的 API 來解析 CSV 檔案並將其轉換成 DataTables,讓您可以輕鬆地在 C# 中操作和分析資料。

轉換為 DataTables 時,IronXL 可以處理大型 CSV 檔案嗎?

是的,IronXL 旨在高效處理大型 CSV 檔案,並將其轉換為 DataTables,而不會產生效能問題。

IronXL 是否支援將 CSV 轉換為 DataTable 後的資料處理?

絕對的,一旦您使用 IronXL 將 CSV 檔案轉換成 DataTable,您就可以輕鬆地根據需要操作和分析資料。

如何使用 IronXL 將 CSV 資料匯入資料庫?

使用 IronXL 將 CSV 檔案轉換為 DataTable 之後,您就可以使用 C# 的標準資料庫連線功能將資料插入資料庫。

IronXL 適合在企業應用程式中處理 CSV 檔案嗎?

是的,IronXL 旨在處理企業應用程式中的 CSV 處理任務,提供強大的效能與可靠性。

在 C# 中將 CSV 檔案轉換為 DataTables 有哪些優點?

將 CSV 檔案轉換為 DataTables,可以更輕鬆地進行資料處理、分析以及與資料庫整合,增強應用程式的資料處理能力。

除了 CSV 之外,IronXL 還能用於其他試算表檔案類型嗎?

是的,IronXL 支援各種試算表檔案類型,包括 Excel 格式,可在 C# 中實現多樣化的資料處理功能。

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