在实际环境中测试
在生产中测试无水印。
随时随地为您服务。
在当今的数字世界中,高效处理数据是一项重要任务。软件开发中的一个常见需求就是从 CSV 文件中读取数据并将其存储到数据库中。本教程介绍了使用 C# 从 CSV 文件读取数据并将其存储到 SQL Server 数据库的步骤,特别是利用了 IronXL 库.本指南专为初学者设计,将以简单、引人入胜的方式进行讲解。
CSV (逗号分隔值) 文件是一种纯文本文件,包含用逗号分隔的数据。由于其简单性和与 Excel 等各种应用程序的兼容性,它是一种常用的数据传输格式。
SQL Server 是微软公司推出的数据库管理系统。它用于以结构化的方式存储和管理数据。在本例中,我们将在 SQL Server 表中存储 CSV 数据。
铁XL 是为 .NET 应用程序量身定制的 Excel 库,专门用于使开发人员无需使用 Microsoft Office Interop 即可读取、生成和编辑 Excel 文件。该库的突出特点是兼容各种 .NET 版本和平台,包括 .NET Core、.NET Standard 和 .NET Framework,并支持 Windows、Linux 和 macOS 等不同操作系统。它是一个功能强大的数据导入库,尤其适用于处理 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
确保将 "path\to\your\csv\file.csv "替换为 CSV 文件的实际路径,将 "YourModel "替换为代表 CSV 数据的模型,将 "your_connection_string "替换为数据库连接字符串,将 "YourTableName "替换为数据库表的名称。
Visual Studio:确保已安装 Visual Studio。
SQL 服务器:您应已安装并可访问 SQL Server。
Install-Package IronXL.Excel
或
dotnet add package IronXL
确保在要安装 IronXL 的项目目录下运行这些命令。
导入数据前,请在 SQL Server 数据库中创建一个目标表。该表将存储 CSV 数据。
CREATE TABLE YourTableName (
Column1 DataType,
Column2 DataType,
...
);
将 YourTableName、Column1、Column2 和 DataType 替换为您的具体信息。
1.首先,确保您有一个 CSV 文件,其中包含要导入的数据。
2.在 Visual Studio 中创建一个新的 C# 控制台应用程序项目。
3.安装用于读取 CSV 文件的 CsvHelper NuGet 软件包。您可以在 Visual Studio 中打开 NuGet 软件包管理器控制台,然后运行以下命令:
:installCmd Install-Package CsvHelper
using System;
using System.IO;
using CsvHelper;
using System;
using System.IO;
using CsvHelper;
Imports System
Imports System.IO
Imports CsvHelper
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"
确保将 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
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
CsvReader
对象。例如 csv.Configuration.HasHeaderRecord = true;
csv.Configuration.HasHeaderRecord = true;
csv.Configuration.HasHeaderRecord = True
GetRecords<T>()对象的
CsvReader` 方法,将 CSV 数据读入对象集合。替换 var records = csv.GetRecords<YourModel>();
var records = csv.GetRecords<YourModel>();
Dim records = csv.GetRecords(Of YourModel)()
确保将 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
11.可选择使用 ADO.NET 或实体框架等 ORM 工具建立与 SQL Server 数据库的连接。
12.使用所选的数据库访问机制将每条记录插入数据库。例如,如果使用 ADO.NET,则可以利用 "SqlBulkCopy "类高效地批量插入数据。
13.处理导入过程中可能出现的任何异常,并提供适当的错误信息或日志记录。
14.运行应用程序并验证 CSV 数据是否已成功导入数据库,以此测试应用程序。
就是这样! 现在,您已使用 C# 成功地将 CSV 数据导入 SQL Server 数据库。
开始从 CSV 文件导入数据时,关键的第一步是准确读取其中的数据。CSV 文件中的每一行通常代表一条数据记录,每条记录由一个或多个字段组成,字段之间用逗号隔开。
然后,我们使用 IronXL 库来处理 CSV 文件。要使用 IronXL 读取 CSV 文件,需要使用其 WorkBook 和 WorkSheet 类。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
建立与 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
connectionString "变量包含连接到 SQL Server 的所有必要信息。它通常包括服务器名称、数据库名称、用户 ID 和密码。连接字符串示例如下服务器=myServerAddress;数据库=myDataBase;用户 ID=myUsername;密码=myPassword;`。请务必用实际的服务器详细信息替换这些占位符。
与 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
首先,它使用 DatabaseConnector 类打开与 SQL Server 数据库的连接,确保数据交易的路径。该方法会检查数据库中是否存在名为 "CSVData "的表。
如果未找到表,则继续创建。表的模式是根据传递给该方法的 DataTable 模式构建的,所有列都设置为 NVARCHAR(最大) 以适应任何文本数据。这是一种通用方法,可能需要改进,以便更紧密地匹配特定数据类型。
之后,将制定并执行一条 SQL 命令,以验证表是否存在或创建表。这样就能确保随后的批量复制操作有一个目标表可以插入数据。表准备就绪后,SqlBulkCopy 类将用于把数据从数据表直接传输到 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
将 path_to_your_csv_file.csv
替换为 CSV 文件的路径。
运行项目后,您将看到以下输出。成功信息表示所有操作都已成功执行,数据已复制到数据库。
Data imported successfully!
现在,您可以打开 SQL Server Management Studio (SSMS) 并查看数据库下的表格。你会在表中看到以下数据。
本教程将指导您使用 C# 从 CSV 文件读取数据并将其存储到 SQL Server 数据库中。按照这些步骤并利用 IronXL 库,您就可以在 C# 应用程序中有效地管理 CSV 数据。
IronXL 提供了一个 免费试用 供用户在承诺购买之前体验其功能。这种全功能试用版允许潜在用户在没有任何水印的生产环境中测试和评估产品。试用期结束后,如果您决定继续在您的项目中使用 IronXL,则产品许可从 $749 开始。