SqlBulkCopy(批量复制)方法,高性能批量插入数据

	今天主要是想着如何提高批量数据的插入速度,刚好了解到这个SqlBulkCopy方法。
	SqlBulkCopy是一种将数据复制到数据库的高性能方法。SqlBulkCopy中有一个WriteToServer,
它用来从数据的源复制数据到数据的目的地。
	不过SqlBulkCopy仅支持SQL Server表中批量写入数据。但是数据源不限于SQL Server,
支持各种数据源,只需要将数据源加载到DataTable实例或者是IDataReader实例读取数据

使用此类方法的步骤:
初始化数据源类型(此处我使用DataTable类型)
DataTable CopyData= new DataTable("表名");
一般是使用表中的列名作为数据源的列名
DataTable CopyData= new DataTable("TestTable");
					CopyData.Columns.Add("id", typeof(Int));
                    CopyData.Columns.Add("Name", typeof(string));
                    CopyData.Columns.Add("Time", typeof(DateTime));
                    CopyData.Columns.Add("Content", typeof(string));

给数据填充数据

foreach (var dr in dt.Tables[0].Rows)
                    {
                        DataRow row = importDataTable.NewRow();
                        row["id"] = Convert.ToInt(id);
                        row["Name"] = RealName;//操作人
                        row["Time"] = DateTime.Now;//操作时间
                        row["Content"] = String.Join("=", dr.ItemArray);//内容
                        CopyData.Rows.Add(row);
                    }

打开数据库连接插入数据

string connectionStr = “数据库连接字符串”;
SqlConnection connection = new SqlConnection(connectionStr );
            using (connection)
            {
                using (SqlBulkCopy sqlBulkCopy = new SqlBulkCopy(connectionStr, SqlBulkCopyOptions.UseInternalTransaction))
                {
                    try
                    {
                        sqlBulkCopy.DestinationTableName = “TestTable”;
                        sqlBulkCopy.BatchSize = CopyData.Rows.Count;
                        for (int i = 0; i < CopyData.Columns.Count; i++)
                        {
                            sqlBulkCopy.ColumnMappings.Add(CopyData.Columns[i].ColumnName, CopyData.Columns[i].ColumnName);
                        }
                        sqlBulkCopy.WriteToServer(CopyData);
                        return "成功";
                    }
                    catch (Exception ex)
                    {
                        return "失败," + ex;
                    }
                }
            }

这样就批量插入完毕了,执行起来速度很快。
sqlBulkCopy.DestinationTableName------->指定数据库表名
sqlBulkCopy.BatchSize--------->每一批次的行数
sqlBulkCopy.ColumnMappings.Add------->指定数据库与数据源之间的对应关系

也可参考:https://blog.csdn.net/u013741154/article/details/40860723

你可能感兴趣的:(c#,后端)