【批量添加】-SqlBulkCopy语句

简介: 【批量添加】-SqlBulkCopy语句

  上篇博客我们介绍了通过拼接sql字符串的方法来对sql数据库进行批量添加,但是通过语句拼接insert语句有个缺点,就是每次最多只能添加1000条。当时我们另外一个界面也用到了批量添加,但是这个界面轻轻一点就需要添加上千条数据,这可如何是好呢,通过查找,我找到了另外一种批量添加的方法,就是通过SqlBulkCopy语句来实现批量添加。


    使用SqlBulkCopy语句的效率比使用insert语句来进行批量添加的速度更快,具体的数据我没有记录下来,但是从感觉上来说,效果很明显。


那么什么是SqlBulkCopy语句呢?


    Microsoft SQL Server 提供一个称为 bcp 的流行的命令提示符实用工具,用于将数据从一个表移动到另一个表(表既可以在同一个服务器上,也可以在不同服务器上)。 SqlBulkCopy 类允许编写提供类似功能的托管代码解决方案。还有其他将数据加载到 SQL Server 表的方法(例如 INSERT 语句),但相比之下 SqlBulkCopy 有明显的性能优势。


    使用 SqlBulkCopy 类只能向 SQL Server 表写入数据。但是,数据源不限于 SQL Server;可以使用任何数据源,只要数据可加载到 DataTable 实例或可使用 IDataReader 实例读取数据。


如何使用SqlBulkCopy语句呢?


#region  批量添加DataTable
        /// <summary>
        /// 批量添加datatable
        /// </summary>
        /// <param name="data"></param>
        /// <returns></returns>
        public bool Insert(DataTable data)
        {
            try 
            {
                //连接sql数据库语句
                using (SqlConnection conn = new SqlConnection("data source=.;initial catalog=YzSystem;persist security info=True;user id=sa;password=xxx;"))
            {
                if (conn.State != ConnectionState.Open)
                    conn.Open();
                using (SqlBulkCopy sqlBulkCopy = new SqlBulkCopy(conn))
                {
                    //     列映射集合。
                    sqlBulkCopy.ColumnMappings.Add(0, "ID");
                    sqlBulkCopy.ColumnMappings.Add(1, "EvaluatorID");
                    sqlBulkCopy.ColumnMappings.Add(2, "CriticID");
                    sqlBulkCopy.ColumnMappings.Add(3, "IsEvaluated");
                    sqlBulkCopy.ColumnMappings.Add(4, "Weight");
                    sqlBulkCopy.ColumnMappings.Add(5, "Year");
                    sqlBulkCopy.ColumnMappings.Add(6, "EvaluationInfoID");
                    sqlBulkCopy.ColumnMappings.Add(7, "IsUsed");
                    //     每一批次中的行数。在每一批次结束时,将该批次中的行发送到服务器。
                    sqlBulkCopy.BatchSize = data.Rows.Count;
                    //     超时之前操作完成所允许的秒数。
                    sqlBulkCopy.BulkCopyTimeout = 60;
                    //     服务器上目标表的名称。
                    sqlBulkCopy.DestinationTableName ="YzSettingEvaluationEntity";
                    //     将data这个datatable中的表复制到目标表中。
                    sqlBulkCopy.WriteToServer(data);
                }
                if (conn.State != ConnectionState.Closed)
                    conn.Close();
                return true;
            }
            }
            catch (Exception ex)
            {
                return false;
            }
            }
        #endregion


   之前一直用的拼接sql字符串来进行批量添加,现在才发现有一种更方便快捷性能高的方法来做之前的工作,还能解决之前遇到的问题,不将就才是发现的原动力啊。

相关文章
|
SQL 数据库
解决SQL报错提供了过多的参数,最多应为 2100
解决SQL报错提供了过多的参数,最多应为 2100
1088 0
|
5月前
|
缓存 Windows
错误代码0x8007000d处理方法?
错误代码0x8007000d通常与系统文件损坏、安装介质问题或更新文件缺失相关,以下是综合解决方案:
|
4月前
|
SQL 数据库
SQL 学习笔记 - 多表关系与多表查询
数据库多表关系包括一对多、多对多和一对一,常用外键关联。多表查询方式有隐式/显式内连接、外连接、子查询等,支持别名和条件筛选。子查询分为标量、列、行、表子查询,常用于复杂查询场景。
Image.FromFile导入图片引发的“内存不足”问题
  C# 的Image.FromFile导入一些大小为0的假图片文件引发的“内存不足”问题。   1、案例问题现场 (1)、大小为0的假图片文件     (2)、引发血案   2、解决方法 这里用的方法是导入时先对图片的大小进行判断,注意获取图片大小的方法。
1831 0
|
SQL 缓存 大数据
C#高效处理大数据的批次处理,以及最好的数据库设计
C#高效处理大数据的批次处理,以及最好的数据库设计
562 0
|
容器
容器内的镜像源地址修改
【8月更文挑战第22天】容器内的镜像源地址修改
595 65
|
存储 SQL NoSQL
商城业务---购物车
这篇文章讨论了商城业务中购物车功能的实现,包括用户登录状态下和未登录状态下购物车的处理方式。文章详细描述了购物车的基本需求、流程分析、判断用户登录状态的拦截器实现、临时购物车和登录购物车的数据操作,以及添加商品到购物车的过程。此外,还提到了可能遇到的问题和解决方案,以及在Redis中存储商品信息的不同数据结构选择。最后,文章展示了未登录和登录状态下购物车的使用效果和Redis中数据的存储情况。
商城业务---购物车
|
云安全 安全 数据库连接
什么是 DoS 和 DDoS 攻击?
【8月更文挑战第31天】
2791 0
|
分布式计算 并行计算 数据处理
大规模数据处理的最佳实践:使用 Dask 进行高效并行计算
【8月更文第29天】在大数据时代,高效地处理大规模数据集是至关重要的。Python 社区提供了一些强大的工具来帮助开发者进行并行和分布式计算,其中之一就是 Dask。本文将详细介绍如何使用 Dask 来优化大规模数据集的处理效率,并提供一些实用的代码示例。
2120 3
|
JSON 开发工具 开发者
CMake进阶教程:深入FetchContent与ExternalProject模块
CMake进阶教程:深入FetchContent与ExternalProject模块
1492 0