在实际环境中测试
在生产中测试无水印。
随时随地为您服务。
在当今的数字世界中,高效处理数据是一项重要任务。 软件开发中的一个常见要求是从 CSV 文件中读取数据并将其存储到数据库中。 本教程包括使用 C# 从 CSV 文件读取数据并将其存储到 SQL Server 数据库的步骤,特别是利用了IronXL 库. 本指南专为初学者设计,将以简单、引人入胜的方式进行解释。
CSV(逗号分隔值)文件是一个纯文本文件,包含用逗号分隔的数据。 由于其简单性和与 Excel 等各种应用程序的兼容性,它是一种常用的数据传输格式。
SQL Server 是微软公司的数据库管理系统。 它用于以结构化的方式存储和管理数据。 在我们的案例中,我们将在 SQL Server 表中存储 CSV 数据。
铁XLMicrosoft Excel 库是为 .NET 应用程序量身定制的 Excel 库,专门用于使开发人员无需使用 Microsoft Office Interop 即可读取、生成和编辑 Excel 文件。该库的突出特点是兼容各种 .NET 版本和平台,包括 .NET Core、.NET Standard 和 .NET Framework,并支持 Windows、Linux 和 macOS 等不同操作系统。 这是一个功能强大的数据导入库,尤其适用于处理 CSV 文件。
在 Visual Studio 中创建一个 C# 控制台程序。
使用 NuGet 软件包管理器安装 CSV 库。
使用库在程序中加载 CSV 文件。
创建与数据库的连接。
使用库从 CSV 文件中读取内容。
使用 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 替换为您的具体信息。
首先,确保您有一个 CSV 文件,其中包含您要导入的数据。
在 Visual Studio 中创建一个新的 C# 控制台应用程序项目。
: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 文件的实际路径。
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
替换为模型类的实际名称。
foreach (var record in records)
{
// code goes here
}
foreach (var record in records)
{
// code goes here
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
可选择使用 ADO.NET 或 Entity Framework 等 ORM 工具建立与 SQL Server 数据库的连接。
使用您选择的数据库访问机制将每条记录插入数据库。 例如,如果您使用 ADO.NET,您可以利用 SqlBulkCopy
类来高效地批量插入数据。
处理导入过程中可能出现的任何异常,并提供适当的错误信息或日志记录。
运行应用程序并验证 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;用户名=myUsername;密码=myPassword;`。 必须用实际服务器的详细信息替换这些占位符。
与 SQL Server 数据库建立连接后,下一个关键步骤就是将 CSV 数据存储到数据库中。 这一步涉及将您读取和处理的数据传输到 SQL Server 表中。 这是数据处理过程的关键部分,因为它涉及到从本地文件到数据库服务器的实际数据迁移。
在这一步中,我们将重点关注如何将现在存储在 DataTable 中的 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 类将数据从 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
将 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 起。