使用IRONXL

如何读取CSV文件中的数据并将其存储在数据库中 C#

发布 2024年一月27日
分享:

在当今的数字世界中,高效处理数据是一项重要任务。软件开发中的一个常见需求就是从 CSV 文件中读取数据并将其存储到数据库中。本教程介绍了使用 C# 从 CSV 文件读取数据并将其存储到 SQL Server 数据库的步骤,特别是利用了 IronXL 库.本指南专为初学者设计,将以简单、引人入胜的方式进行讲解。

了解基础知识

*什么是 CSV 文件?

CSV (逗号分隔值) 文件是一种纯文本文件,包含用逗号分隔的数据。由于其简单性和与 Excel 等各种应用程序的兼容性,它是一种常用的数据传输格式。

SQL 服务器和数据库的作用

SQL Server 是微软公司推出的数据库管理系统。它用于以结构化的方式存储和管理数据。在本例中,我们将在 SQL Server 表中存储 CSV 数据。

IronXL 简介

铁XL 是为 .NET 应用程序量身定制的 Excel 库,专门用于使开发人员无需使用 Microsoft Office Interop 即可读取、生成和编辑 Excel 文件。该库的突出特点是兼容各种 .NET 版本和平台,包括 .NET Core、.NET Standard 和 .NET Framework,并支持 Windows、Linux 和 macOS 等不同操作系统。它是一个功能强大的数据导入库,尤其适用于处理 CSV 文件。

如何在 C&num 中读取和存储 CSV 文件中的数据;

1.在 Visual Studio 中创建一个 C# 控制台程序。

2.使用 NuGet 软件包管理器安装 CSV 库。

3.使用该库在程序中加载 CSV 文件。

4.创建与数据库的连接。

5.使用库从 CSV 文件中读取内容。

6.使用 SqlBulkCopy 方法将内容复制到数据库中。

下面是一个示例代码片段:

using System;
using System.Data;
using System.Data.SqlClient;
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))
            {
                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!");
            }
        }
    }
}
using System;
using System.Data;
using System.Data.SqlClient;
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))
            {
                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!");
            }
        }
    }
}
Imports System
Imports System.Data
Imports System.Data.SqlClient
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)
				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
End Namespace
VB   C#

确保将 "path\to\your\csv\file.csv "替换为 CSV 文件的实际路径,将 "YourModel "替换为代表 CSV 数据的模型,将 "your_connection_string "替换为数据库连接字符串,将 "YourTableName "替换为数据库表的名称。

设置环境

先决条件

  1. Visual Studio:确保已安装 Visual Studio。

  2. SQL 服务器:您应已安装并可访问 SQL Server。

  3. 安装 IronXL:运行以下 NuGet 命令安装 IronXL:
Install-Package IronXL.Excel

dotnet add package IronXL

确保在要安装 IronXL 的项目目录下运行这些命令。

创建 SQL Server 表

导入数据前,请在 SQL Server 数据库中创建一个目标表。该表将存储 CSV 数据。

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

YourTableNameColumn1Column2DataType 替换为您的具体信息。

导入 CSV 数据的分步指南

1.首先,确保您有一个 CSV 文件,其中包含要导入的数据。

2.在 Visual Studio 中创建一个新的 C# 控制台应用程序项目。

3.安装用于读取 CSV 文件的 CsvHelper NuGet 软件包。您可以在 Visual Studio 中打开 NuGet 软件包管理器控制台,然后运行以下命令:

    :installCmd Install-Package CsvHelper
  1. 在 C# 代码文件顶部添加必要的 using 语句:
    using System;
    using System.IO;
    using CsvHelper;
    using System;
    using System.IO;
    using CsvHelper;
Imports System
	Imports System.IO
	Imports CsvHelper
VB   C#
  1. 在代码中指定 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"
VB   C#

确保将 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
    }
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#
  1. 创建一个新的 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
    }
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#
  1. 可选择使用任何必要设置配置 CsvReader对象。例如
    csv.Configuration.HasHeaderRecord = true;
    csv.Configuration.HasHeaderRecord = true;
csv.Configuration.HasHeaderRecord = True
VB   C#
  1. 使用 GetRecords<T>()对象的CsvReader` 方法,将 CSV 数据读入对象集合。替换表示 CSV 文件中每条记录的对象类型。例如
    var records = csv.GetRecords<YourModel>();
    var records = csv.GetRecords<YourModel>();
Dim records = csv.GetRecords(Of YourModel)()
VB   C#

确保将 YourModel 替换为模型类的实际名称。

10.迭代记录并执行所需的处理或验证:

    foreach (var record in records)
    {
        // code goes here
    }
    foreach (var record in records)
    {
        // code goes here
    }
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#

11.可选择使用 ADO.NET 或实体框架等 ORM 工具建立与 SQL Server 数据库的连接。

12.使用所选的数据库访问机制将每条记录插入数据库。例如,如果使用 ADO.NET,则可以利用 "SqlBulkCopy "类高效地批量插入数据。

13.处理导入过程中可能出现的任何异常,并提供适当的错误信息或日志记录。

14.运行应用程序并验证 CSV 数据是否已成功导入数据库,以此测试应用程序。

就是这样! 现在,您已使用 C# 成功地将 CSV 数据导入 SQL Server 数据库。

第一步:读取 CSV 文件

开始从 CSV 文件导入数据时,关键的第一步是准确读取其中的数据。CSV 文件中的每一行通常代表一条数据记录,每条记录由一个或多个字段组成,字段之间用逗号隔开。

然后,我们使用 IronXL 库来处理 CSV 文件。要使用 IronXL 读取 CSV 文件,需要使用其 WorkBookWorkSheet 类。WorkBook 类代表整个电子表格,可以是 Excel 文件,也可以是 CSV 文件。将 CSV 文件路径载入 WorkBook 对象时,IronXL 会将 CSV 文件视为电子表格/数据表。

using IronXL;
public class CSVReader
{
    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;
public class CSVReader
{
    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
Public Class CSVReader
	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
VB   C#

第 2 步:建立数据库连接

建立与 SQL Server 数据库的连接是存储 CSV 数据的基本步骤。这一步涉及在应用程序和数据库服务器之间建立通信链接。成功的连接至关重要,因为没有它,就无法向数据库传输数据。

本步骤的重点是使用 C# 中的连接字符串创建和打开连接。连接字符串是一个重要组件,因为它包含建立连接所需的信息。它就像一把钥匙,打开了数据库的大门。

public class DatabaseConnector
{
    private string connectionString = "your_connection_string_here";

    public SqlConnection ConnectToDatabase()
    {
        SqlConnection connection = new SqlConnection(connectionString);
        connection.Open();
        return connection;
    }
}
public class DatabaseConnector
{
    private string connectionString = "your_connection_string_here";

    public SqlConnection ConnectToDatabase()
    {
        SqlConnection connection = new SqlConnection(connectionString);
        connection.Open();
        return connection;
    }
}
Public Class DatabaseConnector
	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
VB   C#

connectionString "变量包含连接到 SQL Server 的所有必要信息。它通常包括服务器名称、数据库名称、用户 ID 和密码。连接字符串示例如下服务器=myServerAddress;数据库=myDataBase;用户 ID=myUsername;密码=myPassword;`。请务必用实际的服务器详细信息替换这些占位符。

第 3 步:在数据库中存储数据

与 SQL Server 数据库建立连接后,下一个关键步骤就是在数据库中存储 CSV 数据。这一步涉及将读取和处理过的数据传输到 SQL Server 表中。这是数据处理过程的关键部分,因为它涉及到从本地文件到数据库服务器的实际数据迁移。

在这一步中,我们将重点关注如何将现在存储在数据表中的 CSV 数据传输到 SQL Server 数据库。我们将结合使用 C# 和 SQL Server 的功能来高效地完成这项任务。

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);
                }
            }
        }
    }
}
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);
                }
            }
        }
    }
}
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
VB   C#

首先,它使用 DatabaseConnector 类打开与 SQL Server 数据库的连接,确保数据交易的路径。该方法会检查数据库中是否存在名为 "CSVData "的表。

如果未找到表,则继续创建。表的模式是根据传递给该方法的 DataTable 模式构建的,所有列都设置为 NVARCHAR(最大) 以适应任何文本数据。这是一种通用方法,可能需要改进,以便更紧密地匹配特定数据类型。

之后,将制定并执行一条 SQL 命令,以验证表是否存在或创建表。这样就能确保随后的批量复制操作有一个目标表可以插入数据。表准备就绪后,SqlBulkCopy 类将用于把数据从数据表直接传输到 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
VB   C#

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,则产品许可从 $749 开始。

< 前一页
如何在C#中将DataGridView导出到Excel
下一步 >
如何在C#中将Excel文件转换为XML

准备开始了吗? 版本: 2024.9 刚刚发布

免费NuGet下载 总下载量: 988,189 查看许可证 >