System.Data.OleDb
。,2. 设置连接字符串,指定
Excel文件路径和工作表。,3. 使用
OleDbConnection
连接Excel。,4. 用
OleDbCommand
执行SQL查询读取数据。,5. 将读取的数据插入到数据库相应表中。
在现代软件开发中,将Excel数据导入数据库是一项常见的任务,特别是在使用C#作为编程语言时,这一过程涉及多个步骤,包括读取Excel文件、处理数据以及将其插入到数据库中,下面将详细介绍如何在C#中实现这一功能。
1、安装必要的库
EPPlus:用于读取和写入Excel文件的开源库,可以通过NuGet包管理器安装。
Install-Package EPPlus
System.Data.SqlClient:用于与SQL Server数据库进行交互的库,它已经包含在.NET Framework中,但如果没有,也可以通过NuGet安装。
Install-Package System.Data.SqlClient
2、配置数据库连接
确保你已经有一个SQL Server数据库,并且知道其连接字符串,一个典型的连接字符串可能如下所示:
string connectionString = "Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;";
使用EPPlus库可以轻松地读取Excel文件中的数据,以下是一个示例代码,展示如何读取Excel文件中的第一个工作表的所有数据:
using OfficeOpenXml; using System.Data; using System.IO; public DataTable ReadExcelFile(string filePath) { using (var package = new ExcelPackage(new FileInfo(filePath))) { // 获取第一个工作表 var worksheet = package.Workbook.Worksheets[0]; // 将工作表中的数据转换为DataTable var dataTable = new DataTable(); foreach (var firstRowCell in worksheet.Cells[1, 1, 1, worksheet.Dimension.End.Column]) { dataTable.Columns.Add(firstRowCell.Text); } var startRow = 2; // 假设第一行为标题行 for (var rowNumber = startRow; rowNumber <= worksheet.Dimension.End.Row; rowNumber++) { var row = worksheet.Cells[rowNumber, 1, rowNumber, worksheet.Dimension.End.Column]; var newRow = dataTable.NewRow(); foreach (var cell in row) { newRow[cell.Start.Column 1] = cell.Text; } dataTable.Rows.Add(newRow); } return dataTable; } }
一旦你有了包含Excel数据的DataTable
,就可以使用SqlBulkCopy
类将其高效地插入到SQL Server数据库中:
using System.Data.SqlClient; public void ImportDataToDatabase(DataTable dataTable, string connectionString, string tableName) { using (var connection = new SqlConnection(connectionString)) { connection.Open(); using (var bulkCopy = new SqlBulkCopy(connection)) { bulkCopy.DestinationTableName = tableName; bulkCopy.WriteToServer(dataTable); } } }
将上述代码片段结合起来,你可以创建一个完整的程序来读取Excel文件并将其数据导入到数据库中:
class Program { static void Main() { string excelFilePath = @"C:pathtoyourexcelfile.xlsx"; string connectionString = "Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;"; string tableName = "MyTable"; var dataTable = ReadExcelFile(excelFilePath); ImportDataToDatabase(dataTable, connectionString, tableName); Console.WriteLine("数据导入成功!"); } public static DataTable ReadExcelFile(string filePath) { using (var package = new ExcelPackage(new FileInfo(filePath))) { var worksheet = package.Workbook.Worksheets[0]; var dataTable = new DataTable(); foreach (var firstRowCell in worksheet.Cells[1, 1, 1, worksheet.Dimension.End.Column]) { dataTable.Columns.Add(firstRowCell.Text); } var startRow = 2; for (var rowNumber = startRow; rowNumber <= worksheet.Dimension.End.Row; rowNumber++) { var row = worksheet.Cells[rowNumber, 1, rowNumber, worksheet.Dimension.End.Column]; var newRow = dataTable.NewRow(); foreach (var cell in row) { newRow[cell.Start.Column 1] = cell.Text; } dataTable.Rows.Add(newRow); } return dataTable; } } public static void ImportDataToDatabase(DataTable dataTable, string connectionString, string tableName) { using (var connection = new SqlConnection(connectionString)) { connection.Open(); using (var bulkCopy = new SqlBulkCopy(connection)) { bulkCopy.DestinationTableName = tableName; bulkCopy.WriteToServer(dataTable); } } } }
问:如果Excel文件中的列名与数据库表中的列名不匹配怎么办?
答:在这种情况下,你需要手动映射Excel列名到数据库列名,可以在读取Excel文件后创建一个临时的DataTable
,然后根据需要重命名列。
dataTable.Columns["OldColumnName"].ColumnName = "NewColumnName";
然后再将其导入到数据库中。
问:如何处理Excel文件中的空值或缺失值?
答:在读取Excel文件时,可以将空值替换为DBNull
,以便在插入数据库时正确处理它们。
foreach (var cell in row) { newRow[cell.Start.Column 1] = cell.Text == "" ? DBNull.Value : (object)cell.Text; }
这样,当单元格为空时,它将被设置为DBNull
,而不是空字符串。
通过以上步骤,你可以轻松地在C#中实现从Excel文件到数据库的导入功能,无论是处理大量数据还是定期更新数据库,这种方法都能为你提供高效且可靠的解决方案,希望这篇文章对你有所帮助,祝你编程愉快!