使用 IRONXL 如何从 CSV 文件中读取数据并将其存储在数据库 C# 中 Curtis Chau 已更新:七月 28, 2025 下载 IronXL NuGet 下载 DLL 下载 免费试用 法学硕士副本 法学硕士副本 将页面复制为 Markdown 格式,用于 LLMs 在 ChatGPT 中打开 向 ChatGPT 咨询此页面 在双子座打开 向 Gemini 询问此页面 在双子座打开 向 Gemini 询问此页面 打开困惑 向 Perplexity 询问有关此页面的信息 分享 在 Facebook 上分享 分享到 X(Twitter) 在 LinkedIn 上分享 复制链接 电子邮件文章 在当今的数字世界中,高效处理数据是一项重要的任务。 软件开发中一个常见的需求是从 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 文件。 如何在 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 使用GetRecords()方法从CsvReader读取CSV数据。 代替``使用代表 CSV 文件中每条记录的对象类型。例如: 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 或 ORM 工具(如 Entity Framework)建立与 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; 。 务必将这些占位符替换为您的实际服务器详细信息。 步骤三:将数据存储到数据库中 与 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); } } } } } 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 表中。 该操作专为高性能批量数据传输而设计,因此非常适合高效处理大量数据。 第四步:整合所有内容 在认真完成读取 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 文件读取数据并将其存储到数据库中:图 1 - 输出数据库 结论 本教程指导您如何使用 C# 从 CSV 文件读取数据并将其存储在 SQL Server 数据库中。 通过遵循这些步骤并利用 IronXL 库,您可以高效地在 C# 应用程序中管理 CSV 数据。 IronXL 提供免费试用,用户可以在购买前体验其各项功能。 这个功能齐全的试用版允许潜在用户在真实环境中测试和评估产品,而不会在生产环境中添加任何水印。 试用期结束后,如果您决定继续在您的项目中使用 IronXL,则该产品的许可费用从$799起。 常见问题解答 我如何在C#中从CSV文件读取数据? 您可以使用IronXL库在C#中从CSV文件读取数据。IronXL提供`WorkBook`和`WorkSheet`类,允许您像处理Excel电子表格一样加载和操作CSV文件。 使用C#将CSV数据存储在SQL Server数据库中有哪些步骤? 要使用C#将CSV数据存储在SQL Server数据库中,首先使用IronXL读取CSV,然后将数据加载到`DataTable`中,并使用`SqlBulkCopy`将数据高效地插入到SQL Server表中。 如何在我的C#项目中安装IronXL? 您可以通过Visual Studio中的NuGet包管理器在您的C#项目中安装IronXL。在NuGet包管理器中搜索'IronXL'并将其添加到您的项目中。 使用IronXL处理C#中的CSV文件的主要优点是什么? 使用IronXL处理C#中的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数据。 Curtis Chau 立即与工程团队聊天 技术作家 Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。除了开发之外,Curtis 对物联网 (IoT) 有浓厚的兴趣,探索将硬件和软件集成的新方法。在空闲时间,他喜欢玩游戏和构建 Discord 机器人,将他对技术的热爱与创造力相结合。 相关文章 已发布十二月 19, 2025 如何使用 C# Interop 与 IronXL.Excel 在 Excel 中创建透视表 无需 Office 依赖在 C# 中构建 Excel 数据透视表。IronXL 提供强大的数据处理功能,用于创建透视风格的报告,无需 Excel Interop 复杂化。 阅读更多 已发布十二月 18, 2025 C# 使用 IronXL.Excel 将带列标题的 DataGridView 导出到 Excel 学习如何在将DataGridView数据导出到Excel时保留列头。使用IronXL库的C#逐步教程。 阅读更多 已发布十二月 18, 2025 如何在 C# 中使用 IronXL 创建 Excel 报告 在 C# 中使用 IronXL 进行 Excel 报告生成。学习构建具有格式、公式和数据库集成的专业报告。 阅读更多 如何将Datagridview导出到C#中的Excel如何在 C# 中将 Excel 文件转...
已发布十二月 19, 2025 如何使用 C# Interop 与 IronXL.Excel 在 Excel 中创建透视表 无需 Office 依赖在 C# 中构建 Excel 数据透视表。IronXL 提供强大的数据处理功能,用于创建透视风格的报告,无需 Excel Interop 复杂化。 阅读更多
已发布十二月 18, 2025 C# 使用 IronXL.Excel 将带列标题的 DataGridView 导出到 Excel 学习如何在将DataGridView数据导出到Excel时保留列头。使用IronXL库的C#逐步教程。 阅读更多
已发布十二月 18, 2025 如何在 C# 中使用 IronXL 创建 Excel 报告 在 C# 中使用 IronXL 进行 Excel 报告生成。学习构建具有格式、公式和数据库集成的专业报告。 阅读更多