mssqlServer大量数据快速插入:SqlBulkCopy

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插入的数据。

posted @ 2018-08-22 14:53  zhuyapeng  阅读(1669)  评论(0编辑  收藏  举报