C# 使用 SqlBulkCopy 批量导入 DataTable 到 SQL Server

4 下载量 137 浏览量 更新于2024-08-30 收藏 62KB PDF 举报
"C#使用SqlBulkCopy类可以高效地将大量数据批量复制到SQL Server数据表中。此方法适用于不同数据源,只要数据能够被加载到DataTable对象或通过IDataReader接口读取。在实际应用中,可能需要通过ColumnMappings映射来确保源数据与目标表字段的一致性。以下是一个示例,展示了如何使用DataTable作为数据源并配置列映射进行数据复制。" C#中的SqlBulkCopy是.NET框架提供的一个强大工具,用于快速插入大量数据到SQL Server数据库中。它比传统的逐行插入方法(如使用SqlCommand的INSERT语句)更高效,特别是在处理大量数据时。SqlBulkCopy类位于System.Data.SqlClient命名空间下。 在C#中使用SqlBulkCopy进行批量复制数据到数据表通常包括以下几个步骤: 1. 创建SqlConnection对象并打开连接,连接字符串通常从应用程序配置文件中获取。 2. 创建SqlBulkCopy对象,传入SqlConnection实例,这将建立与目标数据库的批量复制连接。 3. (可选)配置SqlBulkCopy对象的属性,如BatchSize(指定每次批量提交的行数)、 BulkCopyTimeout(设置操作超时时间)等。 4. 使用ColumnMappings属性设置源数据列与目标表列之间的映射,确保数据正确写入对应字段。例如,如果源DataTable的列名与目标表的列名不同,就需要通过Add方法添加映射规则。 5. 打开目标表的DataTable,填充数据。 6. 调用SqlBulkCopy的WriteToServer方法,将DataTable的数据写入目标表。 7. 在操作完成后,关闭SqlBulkCopy和SqlConnection对象。 以下是一个示例代码片段,展示了如何使用DataTable作为数据源,并设置列映射: ```csharp using System.Data.SqlClient; using System.Configuration; // 创建SqlConnection SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["connectionString"].ConnectionString); con.Open(); // 假设已经有了填充好的DataTable dt // 创建SqlBulkCopy对象 SqlBulkCopy bulkCopy = new SqlBulkCopy(con); // 设置列映射 bulkCopy.ColumnMappings.Add("源列1", "目标列1"); bulkCopy.ColumnMappings.Add("源列2", "目标列2"); // ... 添加其他映射 // 写入数据 bulkCopy.WriteToServer(dt); // 关闭连接 con.Close(); ``` 在实际开发中,你可能需要根据业务需求封装这些操作到一个方法中,如示例中的SaveJHCData方法。该方法接受一个LzShopBasicData数组,将每个元素转换为DataTable,然后使用SqlBulkCopy进行批量插入。同时,代码中还使用了TransactionScope来提供事务支持,确保数据的完整性和一致性。 C#中的SqlBulkCopy类是批量操作SQL Server数据的强大工具,尤其适用于大数据量的导入和更新,有效提高了数据处理的效率。通过配置ColumnMappings,即使源数据结构与目标表结构不完全匹配,也能灵活地进行数据映射,保证数据正确写入。