欢迎光临小站 杜保良博客

C#批量导入数据SqlBulkCopy类

2018年08月29日 20:41  [互联网]浏览:620  

[摘要] 因为要做一个号码归属地查询小功能,因为要导入外部(文本文件)的电话归属地数据,使用的是SqlDataAdapter类,数据不多,只四万有多条,表也只有一个,phoneBook表,使用的是DataTable和SqlDataAdapter,测试了三次导入,平均18秒,但是我觉得太慢了

 因为要做一个号码归属地查询小功能,因为要导入外部(文本文件)的电话归属地数据,使用的是SqlDataAdapter类,数据不多,只四万有多条,表也只有一个,phoneBook表,使用的是DataTable和SqlDataAdapter,测试了三次导入,平均18秒,但是我觉得太慢了,就百度了下【SQL Server批量导入数据】,发现了SqlBulkCopy这个神器,一秒内导入。

      SqlBulkCopy 这个类用于数据库大批量的数据传递,通常用于新旧数据库之间的更新。关键的一点是,即使表结构不同,也可以通过表字段或者字段位置建立映射关系,将所需的数据导入到目标数据库。

下面代码测试了数据量为一百万条数据,几次测试耗时8秒左右。

 

/// <summary>

        /// SqlBulkCopy类的使用,批量更新数据

        /// </summary>

        public static void SqlBulkCopyDemo()

        {

            String connStr = ConfigurationManager.ConnectionStrings["connStr"].ToString();

            //从数据库中获得表结构和数据

            DataTable student = new DataTable();

            SqlDataAdapter adapter = new SqlDataAdapter("select * from student", connStr);

            adapter.Fill(student);

            //向表中添加数据

            DataRow dr;

            Random r = new Random();

            Stopwatch st = new Stopwatch();

            for(int i = 0; i<1000000; i++)//一百万条数据

            {//数据表中的列:name,no,age,sex

                dr = student.NewRow();

                dr[0] = "小花" + i;

                dr[1] = 108 + i;

                dr[2] = r.Next(9, 40);//这里是因为数据表中有约束,

                dr[3] = (i % 2 == 0 ? "男" : "女");//这个也是有约束

                student.Rows.Add(dr);

            }

            SqlBulkCopy bulk = new SqlBulkCopy(connStr);

            bulk.DestinationTableName = "student";//设置目标表,这里是数据库中的student表

            bulk.ColumnMappings.Add(0, 0);//建立映射关系

            bulk.ColumnMappings.Add(1, 1);

            bulk.ColumnMappings.Add(2, 2);

            bulk.ColumnMappings.Add(3, 3);

            st.Start();//开始计时

            bulk.WriteToServer(student.GetChanges());

            st.Stop();//结束计时

            Console.WriteLine("数据插入成功,耗时为:" + st.ElapsedMilliseconds + "毫秒");

        }

本文来自杜保良博客,转载请标明出处:http://www.dubaoliang.com/view/42.html

更多
相关阅读:
  • 验证码:   留名:        
热门评论: