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

    您的支持,我的动力!
  • 相关阅读:
    day09
    day08
    day05
    day04
    day03
    day02
    LogCat查看Android运行日志
    ADT+SDK,Android开发环境搭建问题
    第二次冲刺周期第十天
    第二次冲刺周期第九天
  • 原文地址:https://www.cnblogs.com/luking/p/1969079.html
Copyright © 2011-2022 走看看