前些日子,公司要求做一个数据导入程序,要求将Excel数据,大批量的导入到数据库中,尽量少的访问数据库,高性能的对数据库进行存储。于是在网上进行查找,发现了一个比较好的解决方案,就是采用SqlBulkCopy来处理存储数据。SqlBulkCopy存储大批量的数据非常的高效,就像这个方法的名字一样,可以将内存中的数据表直接的一次性的存储到数据库中,而不需要一次一次的向数据库Insert数据。初次实验,百万级别的数据表,也只需几秒时间内就可以完全的存入数据库中,其速度,比传统的Insert方法不止快很多倍。下面,我将用代码,介绍其用法。

/// <summary>
        /// LaborReport Data Import To Database
        /// </summary>
        /// <param name="laborReport">laborReport data table</param>
        /// <param name="laborReportDetail">laborReportDetail data table</param>
        public void LaborReportInsert(DataTable laborReport, DataTable laborReportDetail)
        {
            using (SqlConnection conn = new SqlConnection(this.Connection))
            {
                if (conn.State != ConnectionState.Open)
                    conn.Open();

using (SqlBulkCopy sqlBCLaborReport = new SqlBulkCopy(conn))
                {
                    sqlBCLaborReport.BatchSize = laborReport.Rows.Count;
                    sqlBCLaborReport.BulkCopyTimeout = 60;
                    sqlBCLaborReport.DestinationTableName = "LaborReport";
                    sqlBCLaborReport.WriteToServer(laborReport);
                }

using (SqlBulkCopy sqlBCLaborReportDetails = new SqlBulkCopy(conn))
                {
                    sqlBCLaborReportDetails.BatchSize = laborReportDetail.Rows.Count;
                    sqlBCLaborReportDetails.BulkCopyTimeout = 60;
                    sqlBCLaborReportDetails.DestinationTableName = "LaborReportDetails";
                    sqlBCLaborReportDetails.WriteToServer(laborReportDetail);
                }

if (conn.State != ConnectionState.Closed)
                    conn.Close();
            }
        }

上边的示例代码,将内存中的两个DataTable 数据一次性的存入数据库中,只要内存中的数据表格的结构跟数据库中的表格结构一样,就可以了,如果数据库中包含自增列字段,我们可以不需要在内存表中定义,当数据保存到数据库中的时候,自增列会自动生成数据的。

转载于:https://www.cnblogs.com/fx2008/archive/2011/12/08/2280210.html

【转载】高效能,大数据量存储方案SqlBulkCopy相关推荐

  1. 我国成功研制EB级云存储系统:可满足大数据量存储落地需求

    国家863计划云计算关键技术与系统(二期)项目课题验收会11月29日在天津召开,由我国高性能计算领军企业中科曙光承担的"EB级云存储系统研制"课题通过技术验收. 为促进我国云计算核 ...

  2. MySQL数据库如何解决大数据量存储问题

    FROM http://blog.csdn.net/likika2012/article/details/38816037 各位高手您们好,我最近接手公司里一个比较棘手的问题,关于如何利用MySQL存 ...

  3. oracle大数据量删除方案

    oracle进行大数据量删除的时候,容易报错表temp表空间空间不够导致删除失败,此时的处理方案有: 方案一: 分批删除,提交之后继续执行 方案二: 当剩下的数据量小于待删除的数据量时,可以使用转表的 ...

  4. 高并发大数据量的数据库的设计与优化

    1.可以使用静态页面的地方,使用静态页面,减少页面解析时间. 2.尽量使用缓存技术来做.用户缓存.页面缓存等一切缓存,使用特定的机制进行刷新.利用消耗内存空间来换取用户的效率.同时减少数据库的访问次数 ...

  5. mysql大数据量迁移方案

    使用navicat等客户端软件功能进行同步 使用mysqldump进行导出导入同步 使用mysq命令的into file,load file进行同步命令 数据量不大可以用navicat,mysqldu ...

  6. 优化大数据量查询方案——SpringBoot(Cloud)整合ES

    一.Elasticsearch简介 实际业务场景中,多端的查询功能都有很大的优化空间.常见的处理方式有:建索引.建物化视图简化查询逻辑.DB层之上建立缓存.分页-然而随着业务数据量的不断增多,总有那么 ...

  7. B端大数据量查询优化方案

    文章目录 背景 解决方案 方案1:分库分表+搜索能力 方案2:分区+搜索能力 分区 搜索 整体方案 总结 背景 在一些业务场景中,一开始业务量并不大,可见性的几年内不会突破非常大的数量,所以一开始设计 ...

  8. G6展示网络拓扑图,适配大数据量的方案

    接手之初,整体样式: 但当数据量变大时,渲染速度慢,且容易卡死浏览器,导致崩溃.大概支持500个节点. 通过浏览器performance工具分析得知,是由于comboForce(分组力导布局)算法冗余 ...

  9. 大数据量高并发的数据库优化(转载)

    对其进行处理是一项艰巨而复杂的任务.原因有以下几个方面: 一.数据量过大,数据中什么情况都可能存在.如果说有10条数据,那么大不了每条去逐一检查,人为处理,如果有上百条数据,也可以考虑,如果数据上到千 ...

最新文章

  1. 毒霸主程序集成反流氓
  2. FAST选址与三维仿真模拟研究
  3. js实现横向跑马灯效果
  4. Java Learning:并发中的同步锁(synchronized)
  5. 下面有关java类加载器牛客网_下面有关java classloader说法错误的是?
  6. php启用openssl,php怎么开启openssl模块
  7. python语句结束符_python中判断文件结束符的具体方法
  8. 记录一次网盘资源不给提取码的经历!另类编程思维,Python破之!
  9. p1292监狱(动态规划)
  10. PHP中header和session_start前不能有输出的原因
  11. Linux/Unix下ODBC的安装、配置与编程
  12. Linux基金会宣布成立Ceph基金会
  13. 【Unity项目优化宝典】Unity3D手游开发客户端开发经验总结
  14. java 中 isb啥意思_isb官网-新版下载
  15. 签证者的武林秘笈(一)—-来自太傻的签证哲学
  16. SAP 业务技术平台(BTP) Workflow(工作流)功能介绍
  17. GitCode上手使用体验
  18. P2234 [HNOI2002]营业额统计 (Java)
  19. 攻防世界 xctf wtc_rsa_bbq writeup
  20. 随机信号处理的一些归纳

热门文章

  1. JavaScript立即执行函数学习
  2. java集合浅谈(一)
  3. 【转】用户十秒离开你网站的25个原因
  4. 信息掩码游戏地图掩码相关(msk)
  5. 软件开发报价的计算方法[转载]
  6. Windows上C++使用共享内存进行进程间通讯
  7. C# 中的委托和事件(详解) ....
  8. Android—AspectJ实践
  9. windows应用程序的开发一个键盘记录器
  10. python地图 两点距离_没学过还真不会!怎样才能画出准确的地图?