EPPlus
库读取 Excel 文件。,2. 连接数据库,执行 SQL 更新语句。,3. 处理异常并确保资源释放。 示例代码,“ csharp,using OfficeOpenXml;,using System.Data.SqlClient;public void UpdateDatabaseFromExcel(string filePath, string connectionString),{, using (var package = new ExcelPackage(new FileInfo(filePath))), {, var worksheet = package.Workbook.Worksheets[0];, var connection = new SqlConnection(connectionString);, connection.Open(); foreach (var row in worksheet.Cells), {, // 假设第一列为ID,第二列为要更新的字段, if (row.Start.Row > 1) // 跳过标题行, {, var id = row.Cells[0].Value.ToString();, var newValue = row.Cells[1].Value.ToString(); var query = "UPDATE YourTable SET YourColumn = @NewValue WHERE ID = @ID";, using (var command = new SqlCommand(query, connection)), {, command.Parameters.AddWithValue("@ID", id);, command.Parameters.AddWithValue("@NewValue", newValue);, command.ExecuteNonQuery();, }, }, }, },},
“
在C#中,上传Excel文件并更新数据库中的记录是一项常见的任务,通常涉及到读取Excel文件的内容并将其插入或更新到数据库中,以下是实现这一功能的详细步骤:
1、安装必要的库
EPPlus:用于处理Excel文件的开源库。
System.Data.SqlClient:用于连接和操作SQL Server数据库(如果使用其他数据库,请安装相应的数据提供程序)。
2、创建示例Excel文件
假设我们有一个名为data.xlsx
的Excel文件,其中包含一个工作表Sheet1
,该工作表中有两列:ID
和Name
。
3、设置数据库环境
假设我们有一个名为TestDB
的数据库,其中有一个名为Employees
的表,该表也有两列:ID
(主键)和Name
。
1、加载Excel文件
using (var package = new ExcelPackage(new FileInfo("data.xlsx"))) { // 获取第一个工作表 var worksheet = package.Workbook.Worksheets[0]; // 遍历行和列,读取数据 for (int row = 2; row <= worksheet.Dimension.Rows; row++) // 跳过标题行 { var id = worksheet.Cells[row, 1].Value.ToString(); var name = worksheet.Cells[row, 2].Value.ToString(); // 处理读取到的数据(更新数据库) } }
2、注意事项
确保Excel文件的路径正确。
根据实际的Excel文件结构调整列索引。
1、连接到数据库
string connectionString = "Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;"; using (SqlConnection connection = new SqlConnection(connectionString)) { connection.Open(); // 执行数据库操作 }
2、插入或更新数据
插入新记录
using (SqlCommand command = new SqlCommand("INSERT INTO Employees (ID, Name) VALUES (@ID, @Name)", connection)) { command.Parameters.AddWithValue("@ID", id); command.Parameters.AddWithValue("@Name", name); command.ExecuteNonQuery(); }
更新现有记录
using (SqlCommand command = new SqlCommand("UPDATE Employees SET Name = @Name WHERE ID = @ID", connection)) { command.Parameters.AddWithValue("@ID", id); command.Parameters.AddWithValue("@Name", name); command.ExecuteNonQuery(); }
3、事务处理
为了确保数据的一致性,建议将插入或更新操作放在事务中执行。
using (SqlTransaction transaction = connection.BeginTransaction()) { try { // 执行插入或更新命令 transaction.Commit(); } catch (Exception ex) { transaction.Rollback(); throw; } }
以下是一个完整的示例代码,展示了如何读取Excel文件并更新数据库中的记录:
using System; using System.Data.SqlClient; using OfficeOpenXml; using System.IO; class Program { static void Main() { string excelPath = "data.xlsx"; string connectionString = "Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;"; using (var package = new ExcelPackage(new FileInfo(excelPath))) { var worksheet = package.Workbook.Worksheets[0]; using (SqlConnection connection = new SqlConnection(connectionString)) { connection.Open(); using (SqlTransaction transaction = connection.BeginTransaction()) { try { for (int row = 2; row <= worksheet.Dimension.Rows; row++) // 跳过标题行 { var id = worksheet.Cells[row, 1].Value.ToString(); var name = worksheet.Cells[row, 2].Value.ToString(); using (SqlCommand command = new SqlCommand("UPDATE Employees SET Name = @Name WHERE ID = @ID", connection)) { command.Parameters.AddWithValue("@ID", id); command.Parameters.AddWithValue("@Name", name); command.ExecuteNonQuery(); } } transaction.Commit(); } catch (Exception ex) { transaction.Rollback(); Console.WriteLine("Error: " + ex.Message); } } } } } }
1、Q: 如果Excel文件中的数据量很大,如何处理性能问题?
A: 如果数据量很大,可以考虑以下几种方法来优化性能:
批量处理:将数据分批插入或更新到数据库中,而不是逐行处理。
异步操作:使用异步编程模型来避免阻塞线程。
多线程或并行处理:利用多核CPU的优势,通过多线程或并行处理来加速数据处理过程,但请注意线程安全问题。
2、Q: 如果Excel文件中的数据格式不正确或存在缺失值,如何处理?
A: 在读取Excel文件时,可以添加数据验证逻辑来处理格式不正确或缺失值的情况。
数据验证:检查每行数据的格式是否符合预期,如日期格式、数字范围等,如果不符合预期,可以记录错误或跳过该行。
缺失值处理:对于缺失值,可以根据业务需求选择忽略该行、填充默认值或从其他来源获取数据。