C#高效利用SqlBulkCopy导入Excel到SQL Server:10秒内处理6万条数据

5星 · 超过95%的资源 需积分: 9 116 下载量 106 浏览量 更新于2024-12-21 2 收藏 4KB TXT 举报
在C#中实现Excel数据高效导入到SQL Server数据库是一项常见的任务,尤其对于处理大量数据时,传统的逐行循环拼接SQL语句的方式效率低且易出错。本文主要介绍如何利用System.Data.SqlClient.SqlBulkCopy类来优化这个过程,提高性能。 首先,理解SqlBulkCopy的重要性。SqlBulkCopy是System.Data.SqlClient命名空间下的一个类,它提供了一种快速、批量的方式将数据从数据库源(如内存中的DataTable或DataReader)传输到目标表。这种方法相比于循环逐行插入,其优点在于减少了网络往返次数,提高了数据传输速度,尤其是在处理大规模数据时,性能提升显著。 在C#代码中,实现步骤如下: 1. 首先,创建连接字符串,用于连接SQL Server数据库,例如`"server=localhost;uid=sa;pwd=sqlgis;database=master"`,其中包含了服务器地址、用户名、密码和数据库名等信息。 2. 创建一个OpenFileDialog实例,允许用户选择要导入的Excel文件,当用户点击按钮时,调用`TransferData`方法,传入Excel文件路径、要导入的Sheet名称以及数据库连接字符串。 3. 在`TransferData`方法中,首先创建一个DataSet对象,它将用来暂存Excel数据。然后,创建一个OleDbConnection对象,使用Jet OLEDB提供程序(`Provider=Microsoft.Jet.OLEDB.4.0;`)连接Excel文件,通过`ExtendedProperties=Excel8.0;`指定Excel版本。 4. 打开连接,接下来定义一个字符串变量strExcel,用于存储SQL Bulk Copy操作的命令。这里没有直接显示具体命令,但一般会包含`SELECT * FROM [sheetName]$ WHERE 1=1`这样的SQL语句,表示全量数据导入。 5. 使用OleDbDataAdapter创建一个适配器,并使用打开的连接执行查询,填充DataSet。注意,因为是要导入整个Sheet,所以可能需要遍历工作表的每一行数据。 6. 将查询结果集转换为SqlBulkCopy的DataTable,或者使用SqlDataReader逐条读取数据并添加到DataTable中。这一步骤是关键,因为SqlBulkCopy最适合处理批量数据。 7. 最后,使用SqlBulkCopy对象的`WriteToServer`方法将DataTable中的数据批量写入到SQL Server数据库中的指定表。这一步非常快,特别是对于大数据量,时间成本通常在几秒钟内。 在实际应用中,为了进一步优化性能,可以考虑以下几点: - 降低网络I/O压力:尽可能减少数据在网络中的传输,比如通过分批次导入或异步处理。 - 数据预处理:对Excel数据进行清理和格式化,确保导入到数据库的数据符合预期。 - 错误处理和重试机制:如果出现连接错误或数据异常,可以设计合理的错误处理逻辑,避免影响整体流程。 使用C#的SqlBulkCopy类进行Excel数据导入SQL Server数据库是一种高效且简洁的方法,可以大幅提高数据迁移的性能。结合适当的数据处理策略,可以在实际开发中得到很好的效果。