zoukankan      html  css  js  c++  java
  • 高效能,大数据量存储方案SqlBulkCopy 欧阳锋

           前些日子,公司要求做一个数据导入程序,要求将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 数据一次性的存入数据库中,只要内存中的数据表格的结构跟数据库中的表格结构一样,就可以了,如果数据库中包含自增列字段,我们可以不需要在内存表中定义,当数据保存到数据库中的时候,自增列会自动生成数据的。

    您的支持,我的动力!
  • 相关阅读:
    selenium+phantomjs报错:Unable to find a free port的分析和解决
    hadoop集群搭建
    虚拟机安装CentOS7 Minimal、jdk和hadoop
    Javascript学习笔记-一些关键点
    隐藏 Win10 中的3D对象、文档、音乐、图片、视频、下载、桌面7个文件夹
    白话网页的网络性能
    (转)“拿人钱财,与人消灾”,这才是员工含义的本质
    JS 小工具 MYSQL WHERE IN条件 去掉换行符(列转行)
    PHP 基于redis的分布式锁
    PHP 将json的int类型转换为string类型 解决php bigint转科学计数法的问题
  • 原文地址:https://www.cnblogs.com/luking/p/1969079.html
Copyright © 2011-2022 走看看