当前位置:首页 > 行业动态 > 正文

c# excel 导入数据库

以下是C#中将Excel数据导入数据库的基本步骤:,1. 引入相关命名空间,如 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、配置数据库连接

c# excel 导入数据库

确保你已经有一个SQL Server数据库,并且知道其连接字符串,一个典型的连接字符串可能如下所示:

   string connectionString = "Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;";

二、读取Excel文件

使用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文件并将其数据导入到数据库中:

c# 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);
            }
        }
    }
}

五、FAQs

问:如果Excel文件中的列名与数据库表中的列名不匹配怎么办?

答:在这种情况下,你需要手动映射Excel列名到数据库列名,可以在读取Excel文件后创建一个临时的DataTable,然后根据需要重命名列。

dataTable.Columns["OldColumnName"].ColumnName = "NewColumnName";

然后再将其导入到数据库中。

问:如何处理Excel文件中的空值或缺失值?

c# excel 导入数据库

答:在读取Excel文件时,可以将空值替换为DBNull,以便在插入数据库时正确处理它们。

foreach (var cell in row)
{
    newRow[cell.Start.Column 1] = cell.Text == "" ? DBNull.Value : (object)cell.Text;
}

这样,当单元格为空时,它将被设置为DBNull,而不是空字符串。

小编有话说

通过以上步骤,你可以轻松地在C#中实现从Excel文件到数据库的导入功能,无论是处理大量数据还是定期更新数据库,这种方法都能为你提供高效且可靠的解决方案,希望这篇文章对你有所帮助,祝你编程愉快!