使用 IRONXL 如何從 CSV 文件讀取數據並將其存儲到數據庫 C# 中 Jordi Bardia 更新日期:7月 28, 2025 Download IronXL NuGet 下載 DLL 下載 Start Free Trial Copy for LLMs Copy for LLMs Copy page as Markdown for LLMs Open in ChatGPT Ask ChatGPT about this page Open in Gemini Ask Gemini about this page Open in Grok Ask Grok about this page Open in Perplexity Ask Perplexity about this page Share Share on Facebook Share on X (Twitter) Share on LinkedIn Copy URL Email article 在今日的數位世界中,有效地處理數據是一項重要任務。 軟體開發中一個常見的需求是從 CSV 文件中讀取數據並將其存儲到資料庫中。 本教程介紹如何使用 C# 從 CSV 文件中讀取數據並將其存儲到 SQL Server 資料庫中,特別是利用IronXL 庫。 本指南專為初學者設計,將以簡單、有趣的方式進行解釋。 理解基礎知識 什麼是CSV文件? 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 文件。 如何在 C# 中讀取和存儲 CSV 文件的數據 在 Visual Studio 中創建一個 C# 控制台程序。 使用 NuGet 包管理器安裝 CSV 庫。 使用庫在程序中加載 CSV 文件。 創建與資料庫的連接。 使用該庫從 CSV 文件中讀取內容。 使用 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 } } Imports System Imports System.Data Imports System.Data.SqlClient Imports System.Globalization Imports System.IO Imports CsvHelper Namespace CsvReader Friend Class Program Shared Sub Main(ByVal args() As String) Dim csvPath As String = "path\to\your\csv\file.csv" Using reader = New StreamReader(csvPath) Using csv = New CsvReader(reader, CultureInfo.InvariantCulture) ' Mapping the CSV data to the corresponding model Dim records = csv.GetRecords(Of YourModel)() Using sqlBulkCopy As New SqlBulkCopy("your_connection_string") sqlBulkCopy.DestinationTableName = "YourTableName" sqlBulkCopy.WriteToServer(records.AsDataReader()) End Using Console.WriteLine("Data imported successfully!") End Using End Using End Sub End Class ' Define your model that maps to the CSV columns Public Class YourModel ' Define properties here representing the CSV columns End Class End Namespace $vbLabelText $csharpLabel 請確保將 "path\to\your\csv\file.csv" 替換為 CSV 文件的實際路徑,YourModel 替換為表示 CSV 數據的模型,"your_connection_string" 替換為您的資料庫連接字串,以及 "YourTableName" 替換為資料庫表的名稱。 環境設置 先決條件 Visual Studio:確保您已安裝 Visual Studio。 SQL Server:您應當安裝並可以訪問 SQL Server。 IronXL 安裝:通過執行以下 NuGet 命令來安裝 IronXL: dotnet add package IronXL 請確保在您想要安裝 IronXL 的項目目錄中運行這些命令。 創建 SQL Server 表 在導入數據之前,在您的 SQL Server 資料庫中創建一個目標表。 該表將用於存儲 CSV 數據。 CREATE TABLE YourTableName ( Column1 DataType, Column2 DataType, ... ); 用您的具體細節替換 YourTableName、Column1、Column2 和 DataType。 CSV 數據導入逐步指南 首先,確保您有一個包含要導入數據的 CSV 文件。 在 Visual Studio 中創建一個新的 C# 控制台應用程序項目。 安裝 CsvHelper NuGet 包以讀取 CSV 文件。 您可以通過在 Visual Studio 中開啟 NuGet 包管理器控制台並運行以下命令來做到這一點: Install-Package CsvHelper Install-Package CsvHelper SHELL 在 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; Imports System Imports System.IO Imports System.Globalization Imports CsvHelper Imports System.Data.SqlClient $vbLabelText $csharpLabel 在代碼中指定 CSV 文件的路徑。例如: string csvFilePath = @"C:\path\to\your\csv\file.csv"; string csvFilePath = @"C:\path\to\your\csv\file.csv"; Dim csvFilePath As String = "C:\path\to\your\csv\file.csv" $vbLabelText $csharpLabel 請確保將 C:\path\to\your\csv\file.csv 替換為 CSV 文件的實際路徑。 創建一個新的 StreamReader 類的實例來讀取 CSV 文件: using (var reader = new StreamReader(csvFilePath)) { // code goes here } using (var reader = new StreamReader(csvFilePath)) { // code goes here } Using reader = New StreamReader(csvFilePath) ' code goes here End Using $vbLabelText $csharpLabel 創建一個新的 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 } Using reader = New StreamReader(csvFilePath) Using csv = New CsvReader(reader, CultureInfo.InvariantCulture) ' code goes here End Using End Using $vbLabelText $csharpLabel 可選地,使用任何必要的設置配置 CsvReader 對象。 例如: csv.Configuration.HasHeaderRecord = true; csv.Configuration.HasHeaderRecord = true; csv.Configuration.HasHeaderRecord = True $vbLabelText $csharpLabel 使用 CsvReader 對象的 GetRecords<T>() 方法將 CSV 數據讀取到對象集合中。 Replace <T> with the type of object that represents each record in the CSV file. 例如: var records = csv.GetRecords<YourModel>(); var records = csv.GetRecords<YourModel>(); Dim records = csv.GetRecords(Of YourModel)() $vbLabelText $csharpLabel 請確保將 YourModel 替換為您模型類的實際名稱。 遍歷記錄並執行任何必要的處理或驗證: foreach (var record in records) { // Process each record as needed } foreach (var record in records) { // Process each record as needed } For Each record In records ' Process each record as needed Next record $vbLabelText $csharpLabel 可選地,使用 ADO.NET 或類似 Entity Framework 的 ORM 工具建立與 SQL Server 資料庫的連接。 使用您選擇的資料庫訪問機制將每個記錄插入資料庫。 例如,如果您使用 ADO.NET,您可以利用 SqlBulkCopy 類高效批量插入數據。 處理在導入過程中可能發生的任何異常,並提供適當的錯誤信息或日誌記錄。 通過運行應用程式並驗證 CSV 數據成功導入到您的資料庫中來測試您的應用程式。 就是這樣! 您已經使用 C# 成功地將 CSV 數據導入到您的 SQL Server 資料庫中。 步驟 1:讀取 CSV 文件 在開始從 CSV 文件導入數據的任務時,第一個關鍵步驟是準確地讀取其中的數據。 在 CSV 文件中,每行通常代表一個數據記錄,每個記錄由一個或多個欄位組成,這些欄位由逗號分隔。 接著,我們使用 IronXL 庫來處理 CSV 文件。要使用 IronXL 讀取 CSV 文件,您將會使用其 WorkBook 和 WorkSheet 類。 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; } } Imports IronXL Imports System.Data Public Class CSVReader ' Reads a CSV file and converts it to a DataTable Public Function ReadCSV(ByVal filePath As String) As DataTable Dim workbook As WorkBook = WorkBook.Load(filePath) Dim sheet As WorkSheet = workbook.DefaultWorkSheet ' Convert to DataTable for easier processing Dim dataTable As DataTable = sheet.ToDataTable(True) ' Set to 'true' if your CSV has a header row Return dataTable End Function End Class $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; } } Imports System.Data.SqlClient Public Class DatabaseConnector ' Connection string to connect to the database Private connectionString As String = "your_connection_string_here" Public Function ConnectToDatabase() As SqlConnection Dim connection As New SqlConnection(connectionString) connection.Open() Return connection End Function End Class $vbLabelText $csharpLabel connectionString 變數包含連接到 SQL Server 所需的所有詳細信息。 它通常包含伺服器名稱、資料庫名稱、用戶 ID 和密碼。 一個示例的連接字串看起來像這樣: Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;。 替換這些佔位符為您的真實伺服器詳細信息非常重要。 步驟 3:將數據存儲到資料庫 在與 SQL Server 資料庫建立連接後,下一個關鍵步驟就是將 CSV 數據存儲到資料庫中。 這一步涉及到將您讀取處理過的數據傳輸到 SQL Server 表中。 這是數據處理過程的一個關鍵部分,因為它涉及到從本地文件到資料庫伺服器的實際數據遷移。 在這一步中,我們將專注於如何將 CSV 數據,現在存儲在 DataTable 中,傳輸到 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); } } } } } Imports System Imports System.Data Imports System.Data.SqlClient Public Class DataImporter Public Sub ImportData(ByVal dataTable As DataTable) Using connection As SqlConnection = (New DatabaseConnector()).ConnectToDatabase() ' Check if the table exists and create it if it does not. Dim tableName As String = "CSVData" ' Use a valid SQL table name format Dim checkTable As String = $"IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = '{tableName}') BEGIN " Dim createTable As String = "CREATE TABLE " & tableName & " (" For i As Integer = 0 To dataTable.Columns.Count - 1 createTable &= $"[{dataTable.Columns(i).ColumnName}] NVARCHAR(MAX)" If i < dataTable.Columns.Count - 1 Then createTable &= ", " End If Next i createTable &= ") END" Dim createTableCommand As New SqlCommand(checkTable & createTable, connection) createTableCommand.ExecuteNonQuery() ' Now we use SqlBulkCopy to import the data Using bulkCopy As New SqlBulkCopy(connection) bulkCopy.DestinationTableName = tableName Try bulkCopy.WriteToServer(dataTable) Console.WriteLine("Data imported successfully!") Catch ex As Exception Console.WriteLine(ex.Message) End Try End Using End Using End Sub End Class $vbLabelText $csharpLabel 此過程從使用 DatabaseConnector 類開啟與 SQL Server 資料庫的連接開始,確保一條數據交易的通路。 該方法檢查資料庫中名為 "CSVData" 的表是否存在。 如果沒有找到該表,它將繼續創建它。 該表的架構基於傳遞給方法的 DataTable 架構構建,所有列均設置為 NVARCHAR(MAX) 以容納任何文本數據。 這是一種通用的方法,可能需要細化以更密切地匹配特定的數據類型。 之後,將制定和執行一條 SQL 命令以驗證表的存在或創建它。 這確保後續的批量複製操作有一個準備好的目標表來進行數據插入。 在表準備好後,SqlBulkCopy 類被用來將數據從 DataTable 直接轉移到 SQL Server 表中。 這個操作是為高效的批量數據傳輸而設計,非常適合高效處理大批量數據。 步驟 4:將所有步驟組合起來 在勤勞地執行了之前的步驟,即讀取 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!"); } } Friend Class Program Shared Sub Main(ByVal args() As String) Dim filePath As String = "path_to_your_csv_file.csv" Dim reader As New CSVReader() Dim dataTable As DataTable = reader.ReadCSV(filePath) Dim importer As New DataImporter() importer.ImportData(dataTable) Console.WriteLine("Data imported successfully!") End Sub End Class $vbLabelText $csharpLabel 請將 path_to_your_csv_file.csv 替換為 CSV 文件的路徑。 運行項目 當您運行項目時,您將看到以下輸出。 成功信息表示所有操作已成功執行,且數據已複製到資料庫中。 Data imported successfully! 現在,您可以打開 SQL Server Management Studio (SSMS) 並檢查資料庫下的表。 您將在表中看到以下數據。 結論 本教程已經指導您完成了使用 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 在佛罗里达州迈阿密长大,曾在佛罗里达大学学习计算机科学和统计学。 相關文章 發表日期 10月 27, 2025 如何在 C# 中創建 Excel 樞紐分析表 學習使用 C# Interop 和 IronXL 創建 Excel 中的樞紐分析表,這是一個清晰的分步指南。 閱讀更多 發表日期 10月 27, 2025 如何在 C# 中將 DataGridView 匯出為 Excel 並保留列標題 學習如何在 C# 教程中使用 IronXL library 將 DataGridView 資料匯出為 Excel 同時保留列標題。分步教學。 閱讀更多 發表日期 10月 27, 2025 如何使用 IronXL 的 .NET Core CSV 讀取器 學習使用 IronXL 作為 .NET Core CSV 讀取器的有效方法,提供實用範例。 閱讀更多 如何在 C# 中將 Datagridview 導出到 Excel如何在 C# 中將 Excel 文件轉...
發表日期 10月 27, 2025 如何在 C# 中將 DataGridView 匯出為 Excel 並保留列標題 學習如何在 C# 教程中使用 IronXL library 將 DataGridView 資料匯出為 Excel 同時保留列標題。分步教學。 閱讀更多