跳過到頁腳內容
使用 IRONXL
如何使用 C# 從 CSV 文件中讀取數據並將其存儲在資料庫中

如何從 CSV 文件讀取數據並將其存儲到數據庫 C# 中

在當今的數位世界中,高效處理資料是一項重要的任務。 軟體開發中一個常見的需求是從 CSV 檔案中讀取資料並將其儲存在資料庫中。 本教學介紹如何使用 C# 從 CSV 檔案讀取資料並將其儲存在 SQL Server 資料庫中,特別是使用IronXL庫。 本指南專為初學者設計,將以簡單易懂、引人入勝的方式進行講解。

了解基礎知識

什麼是CSV檔案?

CSV(逗號分隔值)文件是一種純文字文件,其中包含以逗號分隔的資料。 由於其簡單易用且與各種應用程式(如 Excel)相容,因此是一種流行的資料傳輸格式。

SQL Server 與資料庫的作用

SQL Server是微軟公司的資料庫管理系統。 它用於以結構化的方式儲存和管理資料。 在本例中,我們將把 CSV 資料儲存在 SQL Server 表中。

IronXL簡介

IronXL是一個專為.NET應用程式定制的 Excel 庫,旨在幫助開發人員無需 Microsoft Office Interop 即可讀取、生成和編輯 Excel 文件。本函式庫的突出特點是相容於各種.NET版本和平台,包括.NET Core、 .NET Standard和.NET Framework,並支援 Windows、Linux 和 macOS 等不同的作業系統。 這是一個功能強大的資料導入庫,尤其適用於處理 CSV 檔案。

How to Read and Store Data From CSV Files in C

  1. 在 Visual Studio 中建立一個 C# 控制台程式。
  2. 使用NuGet套件管理器安裝 CSV 庫。
  3. 使用庫將 CSV 檔案載入到程式中。
  4. 建立與資料庫的連線。
  5. 使用庫讀取 CSV 檔案中的內容。
  6. 使用 SqlBulkCopy 方法將該內容複製到資料庫中。

以下是一個範例程式碼片段:

using System;
using System.Data;
using System.Data.SqlClient;
using System.Globalization;
using System.IO;
using CsvHelper;

namespace CsvReader
{
    class Program
    {
        static void Main(string[] args)
        {
            string csvPath = @"path\to\your\csv\file.csv";

            using (var reader = new StreamReader(csvPath))
            using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
            {
                // Mapping the CSV data to the corresponding model
                var records = csv.GetRecords<YourModel>();

                using (var sqlBulkCopy = new SqlBulkCopy("your_connection_string"))
                {
                    sqlBulkCopy.DestinationTableName = "YourTableName";
                    sqlBulkCopy.WriteToServer(records.AsDataReader());
                }

                Console.WriteLine("Data imported successfully!");
            }
        }
    }

    // Define your model that maps to the CSV columns
    public class YourModel
    {
        // Define properties here representing the CSV columns
    }
}
using System;
using System.Data;
using System.Data.SqlClient;
using System.Globalization;
using System.IO;
using CsvHelper;

namespace CsvReader
{
    class Program
    {
        static void Main(string[] args)
        {
            string csvPath = @"path\to\your\csv\file.csv";

            using (var reader = new StreamReader(csvPath))
            using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
            {
                // Mapping the CSV data to the corresponding model
                var records = csv.GetRecords<YourModel>();

                using (var sqlBulkCopy = new SqlBulkCopy("your_connection_string"))
                {
                    sqlBulkCopy.DestinationTableName = "YourTableName";
                    sqlBulkCopy.WriteToServer(records.AsDataReader());
                }

                Console.WriteLine("Data imported successfully!");
            }
        }
    }

    // Define your model that maps to the CSV columns
    public class YourModel
    {
        // Define properties here representing the CSV columns
    }
}
$vbLabelText   $csharpLabel

請確保將 "path\to\your\csv\file.csv" 替換為您的 CSV 檔案的實際路徑,將 YourModel 替換為表示您的 CSV 資料的模型,將 "your_connection_string" 替換為您的資料庫連接字串,並將 @@--CODE-1617-- 替換為您的資料庫名稱。

建立環境

先決條件

  1. Visual Studio:確保您已安裝 Visual Studio。
  2. SQL Server:您應該已安裝並可存取 SQL Server。
  3. IronXL安裝:執行下列NuGet指令安裝IronXL :
dotnet add package IronXL

請確保在要安裝IronXL 的專案目錄中執行這些命令。

建立 SQL Server 表

在匯入資料之前,請在 SQL Server 資料庫中建立目標表。 此表將儲存 CSV 資料。

CREATE TABLE YourTableName (
    Column1 DataType,
    Column2 DataType,
    ...
);

請將 Column2DataType 替換為您的特定資訊。

逐步指南:如何匯入 CSV 數據

  1. 首先,請確保您有一個包含要匯入的資料的 CSV 檔案。
  2. 在 Visual Studio 中建立一個新的 C# 控制台應用程式專案。
  3. 安裝 CsvHelper NuGet套件以讀取 CSV 檔案。 您可以透過在 Visual Studio 中開啟NuGet套件管理器控制台並執行以下命令來完成此操作:

    Install-Package CsvHelper
    Install-Package CsvHelper
    SHELL
  4. 在 C# 程式碼檔案的頂部加入必要的 using 語句:

    using System;
    using System.IO;
    using System.Globalization;
    using CsvHelper;
    using System.Data.SqlClient;
    using System;
    using System.IO;
    using System.Globalization;
    using CsvHelper;
    using System.Data.SqlClient;
    $vbLabelText   $csharpLabel
  5. 在程式碼中,指定 CSV 檔案的路徑。例如:

    string csvFilePath = @"C:\path\to\your\csv\file.csv";
    string csvFilePath = @"C:\path\to\your\csv\file.csv";
    $vbLabelText   $csharpLabel

    請務必將 C:\path\to\your\csv\file.csv 替換為您的 CSV 檔案的實際路徑。

  6. 建立 StreamReader 類別的新實例來讀取 CSV 檔案:

    using (var reader = new StreamReader(csvFilePath))
    {
        // code goes here
    }
    using (var reader = new StreamReader(csvFilePath))
    {
        // code goes here
    }
    $vbLabelText   $csharpLabel
  7. 建立 CsvReader 類別的新實例,並將 StreamReader 物件傳入:

    using (var reader = new StreamReader(csvFilePath))
    using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
    {
        // code goes here
    }
    using (var reader = new StreamReader(csvFilePath))
    using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
    {
        // code goes here
    }
    $vbLabelText   $csharpLabel
  8. (可選)使用任何必要的設定配置 CsvReader 物件。 例如:

    csv.Configuration.HasHeaderRecord = true;
    csv.Configuration.HasHeaderRecord = true;
    $vbLabelText   $csharpLabel
  9. 使用 GetRecords<t>() 物件的 CsvReader 方法將 CSV 資料讀取到物件集合中。 將 <t> 替換為代表 CSV 檔案中每筆記錄的物件類型。例如:

    var records = csv.GetRecords<YourModel>();
    var records = csv.GetRecords<YourModel>();
    $vbLabelText   $csharpLabel

    請務必將 YourModel 替換為您的模型類別的實際名稱。

  10. 遍歷記錄並執行任何必要的處理或驗證:

    foreach (var record in records)
    {
        // Process each record as needed
    }
    foreach (var record in records)
    {
        // Process each record as needed
    }
    $vbLabelText   $csharpLabel
  11. (選用)使用.NET或 ORM 工具(如 Entity Framework)建立與 SQL Server 資料庫的連線。
  12. 使用您選擇的資料庫存取機制將每筆記錄插入資料庫。 例如,如果您使用.NET,則可以利用 SqlBulkCopy 類別來有效地大量插入資料。
  13. 處理匯入過程中可能出現的任何異常情況,並提供適當的錯誤訊息或日誌記錄。
  14. 執行應用程式並驗證 CSV 資料是否已成功匯入資料庫,以此測試應用程式。

就是這樣! 您已成功使用 C# 將 CSV 資料匯入 SQL Server 資料庫。

步驟 1:讀取 CSV 文件

開始從 CSV 檔案匯入資料時,第一個關鍵步驟是準確讀取其中的資料。 CSV 檔案中的每一行通常代表一筆資料記錄,每筆記錄由一個或多個欄位組成,欄位之間以逗號分隔。

然後我們使用IronXL庫來處理 CSV 檔案。要使用IronXL讀取 CSV 文件,您將使用其 WorkBookWorkSheet 類別。 WorkBook 類別代表整個電子表格,可以是 Excel 文件,也可以是本範例中的 CSV 檔案。當您將 CSV 檔案路徑載入到 WorkBook 物件中時, IronXL會將 CSV 檔案視為電子表格/資料表。

using IronXL;
using System.Data;

public class CSVReader
{
    // Reads a CSV file and converts it to a DataTable
    public DataTable ReadCSV(string filePath)
    {
        WorkBook workbook = WorkBook.Load(filePath);
        WorkSheet sheet = workbook.DefaultWorkSheet;
        // Convert to DataTable for easier processing
        DataTable dataTable = sheet.ToDataTable(true); // Set to 'true' if your CSV has a header row
        return dataTable;
    }
}
using IronXL;
using System.Data;

public class CSVReader
{
    // Reads a CSV file and converts it to a DataTable
    public DataTable ReadCSV(string filePath)
    {
        WorkBook workbook = WorkBook.Load(filePath);
        WorkSheet sheet = workbook.DefaultWorkSheet;
        // Convert to DataTable for easier processing
        DataTable dataTable = sheet.ToDataTable(true); // Set to 'true' if your CSV has a header row
        return dataTable;
    }
}
$vbLabelText   $csharpLabel

步驟 2:建立資料庫連接

建立與 SQL Server 資料庫的連線是儲存 CSV 資料過程中的基本步驟。 此步驟涉及在您的應用程式和資料庫伺服器之間建立通訊鏈路。 連接成功至關重要,因為如果沒有連接,就無法將資料傳輸到資料庫。

本步驟重點介紹如何使用 C# 中的連接字串建立和開啟連線。 連接字串是至關重要的組成部分,因為它包含了建立連接所需的資訊。 它就像一把鑰匙,可以打開資料庫的大門。

using System.Data.SqlClient;

public class DatabaseConnector
{
    // Connection string to connect to the database
    private string connectionString = "your_connection_string_here";

    public SqlConnection ConnectToDatabase()
    {
        SqlConnection connection = new SqlConnection(connectionString);
        connection.Open();
        return connection;
    }
}
using System.Data.SqlClient;

public class DatabaseConnector
{
    // Connection string to connect to the database
    private string connectionString = "your_connection_string_here";

    public SqlConnection ConnectToDatabase()
    {
        SqlConnection connection = new SqlConnection(connectionString);
        connection.Open();
        return connection;
    }
}
$vbLabelText   $csharpLabel

connectionString 變數包含連接到 SQL Server 所需的所有詳細資訊。 它通常包括伺服器名稱、資料庫名稱、使用者 ID 和密碼。 一個連接字串範例如下所示:Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;。 務必將這些佔位符替換為您的實際伺服器詳細資訊。

步驟三:將資料儲存到資料庫中

與 SQL Server 資料庫建立連線後,下一個關鍵步驟是將 CSV 資料儲存到資料庫中。 此步驟涉及將您讀取和處理的資料傳輸到 SQL Server 表中。 這是資料處理過程中至關重要的一部分,因為它涉及將資料從本機檔案實際遷移到資料庫伺服器。

在這一步驟中,我們將重點介紹如何將現在儲存在 DataTable 中的 CSV 資料傳輸到 SQL Server 資料庫。 我們結合使用 C# 和 SQL Server 的功能來有效率地完成這項任務。

using System;
using System.Data;
using System.Data.SqlClient;

public class DataImporter
{
    public void ImportData(DataTable dataTable)
    {
        using (SqlConnection connection = new DatabaseConnector().ConnectToDatabase())
        {
            // Check if the table exists and create it if it does not.
            string tableName = "CSVData"; // Use a valid SQL table name format
            string checkTable = $"IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = '{tableName}') BEGIN ";
            string createTable = "CREATE TABLE " + tableName + " (";
            for (int i = 0; i < dataTable.Columns.Count; i++)
            {
                createTable += $"[{dataTable.Columns[i].ColumnName}] NVARCHAR(MAX)";
                if (i < dataTable.Columns.Count - 1)
                    createTable += ", ";
            }
            createTable += ") END";
            SqlCommand createTableCommand = new SqlCommand(checkTable + createTable, connection);
            createTableCommand.ExecuteNonQuery();

            // Now we use SqlBulkCopy to import the data
            using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connection))
            {
                bulkCopy.DestinationTableName = tableName;
                try
                {
                    bulkCopy.WriteToServer(dataTable);
                    Console.WriteLine("Data imported successfully!");
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
            }
        }
    }
}
using System;
using System.Data;
using System.Data.SqlClient;

public class DataImporter
{
    public void ImportData(DataTable dataTable)
    {
        using (SqlConnection connection = new DatabaseConnector().ConnectToDatabase())
        {
            // Check if the table exists and create it if it does not.
            string tableName = "CSVData"; // Use a valid SQL table name format
            string checkTable = $"IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = '{tableName}') BEGIN ";
            string createTable = "CREATE TABLE " + tableName + " (";
            for (int i = 0; i < dataTable.Columns.Count; i++)
            {
                createTable += $"[{dataTable.Columns[i].ColumnName}] NVARCHAR(MAX)";
                if (i < dataTable.Columns.Count - 1)
                    createTable += ", ";
            }
            createTable += ") END";
            SqlCommand createTableCommand = new SqlCommand(checkTable + createTable, connection);
            createTableCommand.ExecuteNonQuery();

            // Now we use SqlBulkCopy to import the data
            using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connection))
            {
                bulkCopy.DestinationTableName = tableName;
                try
                {
                    bulkCopy.WriteToServer(dataTable);
                    Console.WriteLine("Data imported successfully!");
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
            }
        }
    }
}
$vbLabelText   $csharpLabel

它首先使用 DatabaseConnector 類別開啟與 SQL Server 資料庫的連接,從而確保資料事務的路徑。 此方法檢查資料庫中是否存在名為"CSVData"的表。

如果找不到該表,則會建立該表。 該表的架構是基於傳遞給該方法的 DataTable 架構構建的,所有列都設置為 NVARCHAR(MAX) 以容納任何文字資料。 這是一種通用方法,可能需要進行改進以更精確地匹配特定資料類型。

之後,編寫並執行 SQL 命令,以驗證表是否存在或建立該表。 這樣可以確保後續的批次複製操作有一個可用於資料插入的目標表。 表格準備就緒後,使用 SqlBulkCopy 類別將資料從 DataTable 直接傳輸到 SQL Server 表中。 此操作專為高效能大量資料傳輸而設計,因此非常適合高效處理大量資料。

第四步:整合所有內容

在認真完成讀取 CSV 資料、建立資料庫連線和準備傳輸資料等前幾個步驟之後,我們來到了最後也是至關重要的階段:將這些單獨的元件整合到一個連貫的流程中。

此整合是在 C# 應用程式的 Main 方法中完成的,所有功能都整合在一起,從而能夠將資料從 CSV 檔案匯入到 SQL Server 資料庫。

class Program
{
    static void Main(string[] args)
    {
        string filePath = "path_to_your_csv_file.csv";
        CSVReader reader = new CSVReader();
        DataTable dataTable = reader.ReadCSV(filePath);
        DataImporter importer = new DataImporter();
        importer.ImportData(dataTable);
        Console.WriteLine("Data imported successfully!");
    }
}
class Program
{
    static void Main(string[] args)
    {
        string filePath = "path_to_your_csv_file.csv";
        CSVReader reader = new CSVReader();
        DataTable dataTable = reader.ReadCSV(filePath);
        DataImporter importer = new DataImporter();
        importer.ImportData(dataTable);
        Console.WriteLine("Data imported successfully!");
    }
}
$vbLabelText   $csharpLabel

path_to_your_csv_file.csv 替換為您的 CSV 檔案路徑。

專案運行

項目運行後,您將看到以下輸出。 成功訊息表示所有操作均已成功執行,資料已複製到資料庫。

Data imported successfully!

現在,您可以開啟 SQL Server Management Studio (SSMS) 並檢查資料庫下的表。 您將在表格中看到以下數據。

如何從 CSV 檔案讀取資料並將其儲存到資料庫中(C#):圖 1 - 輸出資料庫

結論

本教學課程指導您如何使用 C# 從 CSV 檔案讀取資料並將其儲存在 SQL Server 資料庫中。 透過遵循這些步驟並利用IronXL庫,您可以有效地在 C# 應用程式中管理 CSV 資料。

IronXL提供免費試用,用戶可以在購買前體驗其各項功能。 這個功能齊全的試用版允許潛在用戶在真實環境中測試和評估產品,而不會在生產環境中添加任何浮水印。 試用期結束後,如果您決定繼續在您的專案中使用IronXL ,則該產品的許可從 $799 開始。

常見問題解答

如何在 C# 中從 CSV 文件讀取數據?

您可以使用 IronXL 庫在 C# 中從 CSV 文件讀取數據。IronXL 提供 `WorkBook` 和 `WorkSheet` 類,允許您將 CSV 文件加載並操作,就像處理 Excel 試算表一樣。

將 CSV 數據存儲到 SQL Server 資料庫中的步驟是什麼?

要在 C# 中將 CSV 數據存儲到 SQL Server 資料庫中,首先使用 IronXL 讀取 CSV,然後將數據加載到 `DataTable` 並使用 `SqlBulkCopy` 高效地插入到 SQL Server 表中。

如何將 IronXL 安裝到我的 C# 項目中使用?

您可以在您的 C# 項目中使用 Visual Studio 的 NuGet 套件管理器來安裝 IronXL。在 NuGet 套件管理器中搜索 'IronXL' 並添加到您的項目中。

在 C# 中使用 IronXL 處理 CSV 文件的主要優勢是什麼?

在 C# 中使用 IronXL 處理 CSV 文件的主要優勢是它能夠在 .NET 應用程序中無縫管理和操作 CSV 和 Excel 文件,提供跨多個 .NET 版本和操作系統的兼容性。

我可以使用 IronXL 處理 Excel 文件以及 CSV 文件嗎?

是的,IronXL 設計用於處理 Excel 和 CSV 文件,使其在 .NET 應用程序中管理試算表數據成為一個多功能工具。

如果我在使用 IronXL 讀取 CSV 文件時遇到錯誤,我應該怎麼辦?

如果您在使用 IronXL 讀取 CSV 文件時遇到錯誤,確保 CSV 文件格式正確,且 IronXL 已正確安裝在您的項目中。您可以參考 IronXL 的文檔尋求故障排除建議。

如何在購買前測試 IronXL 的功能?

IronXL 提供一個完全功能齊全的免費試用版,允許您在生產環境中無任何限制地測試和評估該產品。

使用 IronXL 將 CSV 數據存儲到資料庫的先決條件是什麼?

先決條件包括已安裝 Visual Studio、有 SQL Server 訪問權限,以及通過 NuGet 安裝的 IronXL。您還需要設置一個 SQL Server 表來存儲 CSV 數據。

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

鋼鐵支援團隊

我們每週 5 天,每天 24 小時在線上。
聊天
電子郵件
打電話給我