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

    您的支持,我的动力!
  • 相关阅读:
    Django(app的概念、ORM介绍及编码错误问题)
    Django(完整的登录示例、render字符串替换和redirect跳转)
    Construct Binary Tree from Preorder and Inorder Traversal
    Single Number II
    Single Number
    Binary Tree Level Order Traversal II
    Binary Tree Level Order Traversal
    Binary Tree Zigzag Level Order Traversal
    Recover Binary Search Tree
    Add Binary
  • 原文地址:https://www.cnblogs.com/luking/p/1969079.html
Copyright © 2011-2022 走看看