SqlBulkCopy批量数据插入

当数据量很大时,如果使用cmd.ExecuteNonQuery()循环插入数据,速度会非常慢,此时可以使用SqlBulkCopy来进行批量插入,可以极大提高插入速度。

以下是源代码示例:


            OpenFileDialog ofd = new OpenFileDialog();
            ofd.Filter = "文本文件|*.txt";
            if (ofd.ShowDialog() != true)
            {
                return;
            }
            else
            {
                string[] tels = File.ReadAllLines(ofd.FileName,Encoding.Default);
                string connStr = @"Data Source=.\SQLExpress;Initial Catalog=practice;User ID=sa;Password=381213";
                DateTime startTime = DateTime.Now;
                DataTable table=new DataTable();//创建DataTable
              table.Columns.Add("tel"); //给DataTable添加列
                table.Columns.Add("area"); 
                table.Columns.Add("telType");
                table.Columns.Add("areaNum");

                 for (int i = 1; i < tels.Length; i++)
                 {
                     string[] s = tels[i].Split('\t');
                     string startTelNum = s[0];
                     string area = s[1].Trim('"');
                     string telType = s[2].Trim('"');
                     string areaNum = s[3].Trim('"');
                     DataRow row=table.NewRow();//创建新行
                     row["tel"]=startTelNum;//给对应的列赋值
                     row["area"] = area;//给对应的列赋值
                     row["telType"] = telType;//给对应的列赋值
                     row["areaNum"] = areaNum;//给对应的列赋值
                     table.Rows.Add(row);//将row添加到DataTable中
                 }
                 using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connStr)) //创建一个SqlBulkCopy实例,connStr是数据库连接字符串
                {
                    bulkCopy.DestinationTableName="telNum";//指明服务器上的目标表名               
                    bulkCopy.ColumnMappings.Add("tel","telNum");//添加DataTable中列名和目标表中列的映射,前一个参数是DataTable的列名,后一个是对应的目标表的列名
                    bulkCopy.ColumnMappings.Add("area","area");
                    bulkCopy.ColumnMappings.Add("telType","telType");
                    bulkCopy.ColumnMappings.Add("areaNum","areaNum");
                    bulkCopy.WriteToServer(table);
                }

               }

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值