文档章节

.net 大数据量的批量插入

osenlin
 osenlin
发布于 2014/11/20 14:29
字数 304
阅读 105
收藏 0
点赞 0
评论 0
  1. 使用Insert循环插入(每次一条)

  2. 使用BulkCopy写入;

    1. 1,创建一个DataTable dt
      
      2,using (SqlBulkCopy sbc = new SqlBulkCopy(目标库连接字符串))//目标库的链接字符串
                  {
                      sbc.BulkCopyTimeout = 600;
                      sbc.BatchSize = dt.Rows.Count;
                      sbc.DestinationTableName = "目标表名";//目标表
                      sbc.WriteToServer(dt);
                  }
      }
    2. 第二种写法
                  SqlDataReader reader =commandSourceData.ExecuteReader();           
      
                  using (SqlConnection destinationConnection = new SqlConnection(connectionString))
                  {
                      destinationConnection.Open();
      
                      using (SqlBulkCopy bulkCopy =new SqlBulkCopy(destinationConnection))
                      {
                          bulkCopy.DestinationTableName = "dbo.BulkCopyDemoMatchingColumns";                    
                          try
                          {                       
                              bulkCopy.WriteToServer(reader);
                          }                    catch (Exception ex)
                          {
                              Console.WriteLine(ex.Message);
                          }                    finally
                          {                        // Close the SqlDataReader. The SqlBulkCopy
                              // object is automatically closed at the end
                              // of the using block.
                              reader.Close();
                          }
                      }               
                      long countEnd = System.Convert.ToInt32(
                          commandRowCount.ExecuteScalar());
                      Console.WriteLine("Ending row count = {0}", countEnd);
                      Console.WriteLine("{0} rows were added.", countEnd - countStart);
                      Console.WriteLine("Press Enter to finish.");
                      Console.ReadLine();
                  }
              }
  3. 使用表值参数写入。

    1.      SqlParameter[] paramters = new SqlParameter[]
                           {
                               SqlParamHelper.MakeInParam("@dt",SqlDbType.Structured)
                          };
                      DataSet ds = SqlHelper.ExecuteDataset(ComputingDB_ConnString, CommandType.StoredProcedure, "存储过程名", paramters);
      
                      string[] sqls = new string[]
                      {
                          @" insert into table1
                            select * from @dt
                          ",
                     };
      
                      using (SqlConnection connection = new SqlConnection(StatDB_ConnString))
                      {
                          connection.Open();
                          SqlTransaction trans = connection.BeginTransaction();
                          try
                          {
                              string[] typeNames = new string[] { "表类型名" };
                              for (int i = 0; i < sqls.Length; i++)
                              {
                                  paramters[0].Value = ds.Tables[i];
                                  paramters[0].TypeName = typeNames[i];
                                  SqlHelper.ExecuteNonQuery(trans, CommandType.Text, sqls[i], paramters);
                              };
                              trans.Commit();
                          }
                          catch (Exception ex)
                          {
                              trans.Rollback();
                              throw;
                          }
                      }

总结:Insert比较适合于少量数据的添加,如果是大批量的数据,只能考虑使用BulkCopy或表值参数方式,后俩者相比于前者会有一个量级的提升,随着数据量的提升这个差别会越来越大


© 著作权归作者所有

共有 人打赏支持
osenlin
粉丝 29
博文 58
码字总数 74295
作品 0
深圳
架构师
Mongodb亿级数据量的性能测试

进行了一下Mongodb亿级数据量的性能测试,分别测试如下几个项目: (所有插入都是单线程进行,所有读取都是多线程进行) 1) 普通插入性能 (插入的数据每条大约在1KB左右) 2) 批量插入性能...

今幕明
2014/06/24
0
0
Mysql replace 与 insert on duplicate效率分析

我们在向数据库里批量插入数据的时候,会遇到要将原有主键或者unique索引所在记录更新的情况,而如果没有主键或者unique索引冲突的时候,直接执行插入操作。 这种情况下,有三种方式执行: ...

不停息的脚步
2015/07/23
0
0
关于data factory的介绍——即如何快速生成大批量数据

上次在我的博客中讲述了quest公司的spotlight系列软件,这次来扯淡一下quest公司的另一测试辅助软件 datafactory(数据工厂),顾名思义,数据工厂是生产数据的,主要应用领域是性能测试中的...

xiaomin0322
06/29
0
0
下一代大数据即时分析架构――IOTA架构

  【IT168 评论】经过这么多年的发展,已经从大数据1.0的BI/Datawarehouse时代,经过大数据2.0的Web/APP过渡,进入到了IOT的大数据3.0时代,而随之而来的是数据架构的变化。   Lambda架构...

中国大数据
05/18
0
0
SQLite 大数据量 新增 / 修改 提升效率的办法

一、新增 SQLite中的新增默认是单个事务控制的,一次新增就是一次数据库操作,一次事务。如果几千次for循环操作,必然存在效率问题。下面代码是通过事务控制的方式提升效率: public void ad...

atearsan
2013/12/24
0
0
使用存储过程向数据库批量插入数据

<一> 前言 最近有个需求,需要向数据库并发批量插入数据。 最开始使用存储过程,类似这样的: delimiter // CREATE PROCEDURE loadparttab() begin declare v int default 0; while v < 800...

平江夜弹
2015/10/21
2.7K
1
求解,这个内存如何释放

我使用ConcurrentHashMap作为参数传,用于数据的批量插入,使用SimpleJdbcInsert完成批量插入,但是随着插入数据量的增多,内存中的ConcurrentHashMap对象也在不断的增加,一直都没有销毁,这...

嘣猪嗤痴
2017/07/05
72
0
MySQL的百万级性能测试——(一)环境搭建与百万级数据插入

MySQL——全球最流行的数据库(没有之一,就使用量而言)。 ——开源数据库。 ——与mongoDB不同,MySQL是一门关系型数据库。 此系列文章,作者本人将推演至个人毕业设计之中。所以在毕设前,...

志明丶
2017/11/16
0
0
MongoDB大批量读写数据优化记录

用批量写入代替单个写入 最开始,我的代码逻辑是这样的: 这种方法在数据量较小时可以很好的工作,但是当数据量非常大时,此种操作会非常慢,我们需要通过批量写入的方式来写入数据。 调整i...

geekpy
04/20
0
0
Oracle之FORALL与BULK COLLECT简介

在上篇文章Oracle大数据的导入与更新方案中介绍了导入超大数据量的操作,而要批量更新超大数据量的操作时就需要用到本文所要介绍的FORALL与BULK COLLECT语句。 1 PL/SQL块的执行过程 当PL/SQ...

landy8530
03/17
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Android应用Context详解及源码解析

Android应用Context详解及源码解析 本文定位:优质文章收集 本文转载 1 背景 今天突然想起之前在上家公司(做TV与BOX盒子)时有好几个人问过我关于Android的Context到底是啥的问题,所以就马...

lichuangnk
23分钟前
0
0
PostgreSQL的昨天今天和明天

PostgreSQL 是一种非常复杂的对象-关系型数据库管理系统(ORDBMS), 也是目前功能最强大,特性最丰富和最复杂的自由软件数据库系统。有些特性甚至连商业数据库都不具备。 这个起源于伯克利(...

闻术苑
28分钟前
0
0
Mysql对自增主键ID进行重新排序

1,删除原有主键: ALTER TABLE `table_name` DROP `id`; 2,添加新主键字段: ALTER TABLE `table_name` ADD `id` MEDIUMINT( 8 ) NOT NULL FIRST; 3,设置新主键: ALTER TABLE `table_nam......

niithub
33分钟前
0
0
福利篇:免费csdn vip账号分享

分享一个发布免费csdn vip账号的网站:啰嗦vip www.lostvip.com , 各种软件开发类的视频教程:慕课网、动脑学院、黑马各大培训机构VIP视频教程,非常不错!

在水一方发盐人
40分钟前
0
0
Nginx+Tomcat搭建高性能负载均衡集群

一、 工具   nginx-1.8.0   apache-tomcat-6.0.33 二、 目标   实现高性能负载均衡的Tomcat集群:    三、 步骤   1、首先下载Nginx,要下载稳定版:      2、然后解压两个Tom...

码代码的小司机
41分钟前
0
0
Centos7编译安装ntp-4.2.8p11

Centos7编译安装ntp-4.2.8p11 背景 因公司做等保评级,在进行安全漏洞检测时发现ntp需要升级到ntp-4.2.7p25以上版本,经过一番搜索,没有该版本及新版本ntp的yum安装包,所以只能编译安装了,...

阿dai
48分钟前
0
0
antd pro 新增模块的步骤

index.js是整个项目的入口文件。 // 1. Initializeconst app = dva({ history: createHistory(),});// 2. Pluginsapp.use(createLoading());// 3. Register global modelapp.model......

灯下草虫鸣_
54分钟前
0
0
Cisco VPN在win10下报Error 56的解决办法

问题描述 Cisco VPN在win10下报Error 56: The Cisco Systems, Inc. VPN Service has not been started 解决方案 方案一:在计算机管理-》服务 查看Cisco Systems, Inc. VPN Service服务是否存...

chenfj_fer
59分钟前
0
0
Weblogic问题解决记录

问题:点击登录,页面刷新但是不进去管理界面。解决:删除cookies再登录。

wffger
今天
0
0
RxJava2的错误处理方案

最近使用retrofit2 + rxKotlin2写接口访问,想尽量平铺代码,于是就想到当借口返回的状态码为「不成功」时(比如:code != 200),就连同网络错误一起,统一在onError方法中处理。想法总是好的...

猴亮屏
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部