SqlBulkCopy类,为微软的一个大量数据快速插入。直接上代码
表结构:
namespace SqlBulkCopy的演示 { using System.Data.SqlClient; public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { //string connString = "server=.;database=CrmChat14;uid=sa;pwd=master;"; string connString = "server=.;database=MyData;Integrated Security=True;"; //0.0 准备一个DataTable内存表,向这个表中增加10000条数据 DataTable dt = new DataTable(); //在dt中一定要按照DestinationTableName对应的表结构来进行创建 //但是:自增ID,可以不建立 dt.Columns.Add("dd", typeof(string)); //构造1W条数据 int count = 100 * 100; for (int i = 0; i < count; i++) { //根据dt的表结构创建一个同结构的DataRow对象 DataRow row = dt.NewRow(); //给row中的dd字段赋值 row["dd"] = "测试" + i; //将row对象添加到内存表dt中 dt.Rows.Add(row); } //统计下面代码的执行时间: System.Diagnostics.Stopwatch st = new System.Diagnostics.Stopwatch(); st.Start(); //1.0 实例化sqlbulkcopy的对象 using (SqlBulkCopy copy = new SqlBulkCopy(connString)) { //告诉copy对象按照指定的5000条数据量来进行插入 //如果这个数据太庞大的话,一定要加上BatchSize 来分配处理 copy.BatchSize = 5000; //告诉copy将dt中的数据插入到数据库CrmChat14中的SqlBulkCopyDemo表 copy.DestinationTableName = "SqlBulkCopyDemo"; //告诉copy dt内存表中的dd列对应的是SqlBulkCopyDemo表中的BName,他们之间一定要有一个映射 copy.ColumnMappings.Add("dd", "BName"); //2.0 将数据批量的插入到db中 copy.WriteToServer(dt); } st.Stop(); MessageBox.Show("插入" + count + "条数据,耗时:" + st.ElapsedMilliseconds + "毫秒"); } } }
结果:
SqlBulkCopy的本质,是用的INSERT bulk插入的数据。