zoukankan      html  css  js  c++  java
  • 使用SqlBulkCopy批量插入大数据

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

    使用代码如下

    先创建一个datatable 

    DataTable dt= new DataTable();
    dt.Columns.Add("UserName", typeof(long));
    dt.Columns.Add("Longitude", typeof(double));
    dt.Columns.Add("Latitude", typeof(double));
    dt.Columns.Add("Address", typeof(string));

    然后向datatable添加100w数据

    代码就不填写了

    然后重头戏,批量添加数据

    using (SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString))
                {
                    try
                    {
                        connection.Open();
                        //SqlBulkCopyOptions.KeepIdentity
                        using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connection.ConnectionString, SqlBulkCopyOptions.UseInternalTransaction, null))
                        {
                            bulkCopy.DestinationTableName = 你的表明;
                            bulkCopy.BatchSize = dt.Rows.Count;
                            bulkCopy.BulkCopyTimeout = 12 * 60 * 60;
                            
                            bulkCopy.ColumnMappings.Add("UserName", "GridID");
                            bulkCopy.ColumnMappings.Add("Longitude", "Longitude");
                            bulkCopy.ColumnMappings.Add("Latitude", "Latitude");
                            bulkCopy.ColumnMappings.Add("Address", "Address");
                            bulkCopy.WriteToServer(dt);
                        }
                    }
                    catch (Exception ex)
                    {
                        throw ex;
                    }
                    finally
                    {
                        if (connection != null && connection.State != ConnectionState.Closed)
                        {
                            connection.Close();
                        }
                    }
                }
    

      

    最后经过测试100w条数据,几秒就插入完毕,比传统的insert into不知道快了多少倍

  • 相关阅读:
    kubernetes之常见故障排除(一)
    kubernetes集群管理命令(三)
    kubernetes集群管理命令(二)
    kubernetes集群管理常用命令一
    kubernetes集群管理之通过jq来截取属性
    kubernetes管理之使用yq工具截取属性
    kubectl技巧之通过jsonpath截取属性
    kubectl技巧之通过go-template截取属性
    kubernetes容器编排之定义环境变量以及通过downwardapi把pod信息作为环境变量传入容器内
    kubectl技巧之查看资源列表,资源版本和资源schema配置
  • 原文地址:https://www.cnblogs.com/dushaojun/p/7998148.html
Copyright © 2011-2022 走看看