如果你是处理数据驱动应用程序的 .NET 开发人员,你可能遇到过将数据从 Excel 文件导入 SQL Server 数据库的需要。在这篇博客文章中,我们将探讨使用 .NET Core 6.0 高效完成此任务的两种方法。无论您是处理中等规模的数据集还是处理大量数据,我们都能满足您的需求。
将数据从 Excel 导入到 SQL Server 是各个领域的常见要求,包括金融、电子商务和数据分析。必须有强大的方法来有效地处理这个过程。在这篇文章中,我们将深入探讨两种方法:传统的 ADO.NET 方法和优化的 SQLBulkCopy 方法。在这篇博文中,我们将探讨这两种方法。
在深入了解技术细节之前,让我们了解何时以及为什么可能需要将数据从 Excel 导入 SQL Server:
现在,让我们探讨这两种方法。
在开始之前,请确保将必要的 NuGet 包添加到 .NET Core 项目:Before you start, make sure to add the necessary NuGet packages to your .NET Core project:
Install-Package EPPlus
这将允许您使用 Excel 文件。
定义一个模型类来表示要从 Excel 文件导入的数据。例如:
public class Employee
{
public int EmployeeId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
// Add other properties as needed
}
创建一个方法以从 Excel 文件中读取数据,并将其存储在模型对象列表中。下面是一个示例:
using OfficeOpenXml;
public List<Employee> ReadDataFromExcel(string filePath)
{
var employees = new List<Employee>();
using (var package = new ExcelPackage(new FileInfo(filePath)))
{
var worksheet = package.Workbook.Worksheets[0]; // Assuming the data is in the first worksheet
for (int row = 2; row <= worksheet.Dimension.End.Row; row++)
{
var employee = new Employee
{
EmployeeId = Convert.ToInt32(worksheet.Cells\[row, 1\].Value),
FirstName = worksheet.Cells[row, 2].Value.ToString(),
LastName = worksheet.Cells[row, 3].Value.ToString(),
// Map other properties accordingly
};
employees.Add(employee);
}
}
return employees;
}
使用库设置与 SQL Server 数据库的连接。请确保将连接字符串替换为你自己的数据库详细信息:System.Data.SqlClient
using System.Data;
using System.Data.SqlClient;
string connectionString = "Your_Connection_String_Here";
using (var connection = new SqlConnection(connectionString))
{
connection.Open();
// Your SQL Server code goes here (e.g., INSERT statements to insert data into the database)
}
在 SQL Server 连接块中,可以使用 SQL 命令将数据插入数据库。下面是如何将数据插入 SQL Server 表的示例:
// Assuming you have a table named "Employee" with corresponding columns
foreach (var employee in employees)
{
string insertQuery = "INSERT INTO Employee (EmployeeId, FirstName, LastName) VALUES (@EmployeeId, @FirstName, @LastName)";
using (var cmd = new SqlCommand(insertQuery, connection))
{
cmd.Parameters.AddWithValue("@EmployeeId", employee.EmployeeId);
cmd.Parameters.AddWithValue("@FirstName", employee.FirstName);
cmd.Parameters.AddWithValue("@LastName", employee.LastName);
cmd.ExecuteNonQuery();
}
}
在上面的代码块中,“EmployeeID”是数据库和 employee 中的列。EmployeeID 是要传递要插入的 Excel 值,与表的列类似。
请务必在代码中添加错误处理和适当的清理(例如,关闭连接)以确保稳健性。
最后,调用 ReadDataFromExcel 方法以从 Excel 文件中读取数据,并调用用于在应用程序逻辑中将数据插入 SQL Server 数据库的代码。
在开始之前,请确保将必要的 NuGet 包添加到 .NET Core 项目:Before you start, make sure to add the necessary NuGet packages to your .NET Core project:
Install-Package EPPlus
这将允许您使用 Excel 文件。
使用库从 Excel 文件中读取数据,就像在方法中一样EPPlus
使用 SQLBulkCopy 进行批量插入,而不是逐个插入记录。对于大型数据集,这要快得多。以下是修改代码的方法:
using System.Data;
using System.Data.SqlClient;
using OfficeOpenXml;
string connectionString = "Your_Connection_String_Here";
using (var connection = new SqlConnection(connectionString))
{
connection.Open();
// Create a DataTable to hold your data
DataTable dataTable = new DataTable("Employee");
dataTable.Columns.Add("EmployeeId", typeof(int));
dataTable.Columns.Add("FirstName", typeof(string));
dataTable.Columns.Add("LastName", typeof(string));
// Add other columns as needed
// Fill the DataTable with data from Excel
foreach (var employee in employees)
{
dataTable.Rows.Add(employee.EmployeeId, employee.FirstName, employee.LastName /* Add other values */);
}
// Create the SqlBulkCopy object
using (var bulkCopy = new SqlBulkCopy(connection))
{
bulkCopy.DestinationTableName = "Employee"; // Replace with your actual table name
bulkCopy.BatchSize = 1000; // Adjust the batch size as needed
// Optionally, map Excel columns to SQL table columns if they don't match exactly
bulkCopy.ColumnMappings.Add("EmployeeId", "EmployeeId");
bulkCopy.ColumnMappings.Add("FirstName", "FirstName");
bulkCopy.ColumnMappings.Add("LastName", "LastName");
// Add mappings for other columns if needed
// Perform the bulk copy
bulkCopy.WriteToServer(dataTable);
}
}
BatchSize:此属性确定在单个批处理中发送到服务器的行数。您可以根据自己的要求和服务器容量调整此值。
确保处理异常,关闭 SQL 连接,并管理任何其他必要的清理任务。
这两种方法都有其优点,您的选择应符合您的特定项目要求。对于具有灵活架构的小型数据集,ADO.NET 方法提供了简单性和适应性。然而,在处理大量数据时,优化的方法以其出色的性能、内存效率和可扩展性而大放异彩。SqlBulkCopy
考虑数据导入任务的性质和规模,并选择最适合您需求的方法。借助 .NET Core 6.0,你拥有高效处理数据导入的工具和灵活性,使应用程序能够利用 SQL Server 的强大功能进行数据分析和报告。