下面是C#使用SqlBulkCopy批量复制数据到数据表的完整攻略:
1. 简介
SqlBulkCopy是一个高速批量复制数据的操作类,它可以用于将一个数据源中的数据快速地复制到指定的数据库表中。相比于传统的遍历插入的方式,使用SqlBulkCopy可以显著提高代码的执行效率,减少插入数据所需的时间,并节省系统资源。
2. 使用步骤
以下是使用SqlBulkCopy类批量复制数据到数据表的步骤:
1. 准备数据源
SqlBulkCopy只支持将数据源的数据复制到一个目标数据表中,因此第一步是准备需要复制的数据源。数据源可以是DataTable对象、DataReader对象或者一个实现了IEnumerable接口的数据集合。
示例:
DataTable dt = new DataTable();
// 假定数据表中有两列:id 和 name
dt.Columns.Add("id", typeof(int));
dt.Columns.Add("name", typeof(string));
// 添加数据
dt.Rows.Add(1, "张三");
dt.Rows.Add(2, "李四");
2. 创建SqlBulkCopy对象
创建SqlBulkCopy对象并设置需要复制的目标数据表的连接字符串。
示例:
SqlConnection conn = new SqlConnection("Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;");
SqlBulkCopy bulkCopy = new SqlBulkCopy(conn);
// 设置目标数据表的名称
bulkCopy.DestinationTableName = "myTable";
3. 设置列映射关系(可选)
如果数据源中的列和目标数据表中的列名称不一致,则需要设置列映射关系。
示例:
// 将数据源中的 id 列和目标数据表中的 myId 列对应起来
bulkCopy.ColumnMappings.Add("id", "myId");
4. 执行批量复制操作
执行批量复制操作并关闭连接。
示例:
conn.Open();
bulkCopy.WriteToServer(dt);
conn.Close();
3. 示例说明
以下是两个使用SqlBulkCopy类批量复制数据到数据表的示例:
示例 1:复制DataTable对象中的数据到目标数据表
// 准备DataTable对象
DataTable dt = new DataTable();
dt.Columns.Add("id", typeof(int));
dt.Columns.Add("name", typeof(string));
// 添加数据
dt.Rows.Add(1, "张三");
dt.Rows.Add(2, "李四");
// 创建SqlBulkCopy对象
SqlConnection conn = new SqlConnection("Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;");
SqlBulkCopy bulkCopy = new SqlBulkCopy(conn);
bulkCopy.DestinationTableName = "myTable";
// 执行批量复制操作
conn.Open();
bulkCopy.WriteToServer(dt);
conn.Close();
示例 2:复制DataReader对象中的数据到目标数据表
// 准备DataReader对象
SqlConnection sourceConn = new SqlConnection("Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;");
sourceConn.Open();
SqlCommand command = new SqlCommand("SELECT * FROM mySourceTable", sourceConn);
SqlDataReader reader = command.ExecuteReader();
// 创建SqlBulkCopy对象
SqlConnection targetConn = new SqlConnection("Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;");
SqlBulkCopy bulkCopy = new SqlBulkCopy(targetConn);
bulkCopy.DestinationTableName = "myTargetTable";
// 设置列映射关系
bulkCopy.ColumnMappings.Add("id", "myId");
bulkCopy.ColumnMappings.Add("name", "myName");
// 执行批量复制操作
targetConn.Open();
bulkCopy.WriteToServer(reader);
targetConn.Close();
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#使用SqlBulkCopy批量复制数据到数据表 - Python技术站