【批量添加】-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字符串来进行批量添加,现在才发现有一种更方便快捷性能高的方法来做之前的工作,还能解决之前遇到的问题,不将就才是发现的原动力啊。

相关文章
C# DEV 关于设置gridview 指定单元格字体为红色
C# DEV 关于设置gridview 指定单元格字体为红色
|
SQL 数据库
解决SQL报错提供了过多的参数,最多应为 2100
解决SQL报错提供了过多的参数,最多应为 2100
1227 0
|
JSON Java 数据格式
Java如何发起http的get请求的实现
Java如何发起http的get请求的实现
543 0
|
11月前
|
缓存 Windows
错误代码0x8007000d处理方法?
错误代码0x8007000d通常与系统文件损坏、安装介质问题或更新文件缺失相关,以下是综合解决方案:
|
10月前
|
SQL 数据库
SQL 学习笔记 - 多表关系与多表查询
数据库多表关系包括一对多、多对多和一对一,常用外键关联。多表查询方式有隐式/显式内连接、外连接、子查询等,支持别名和条件筛选。子查询分为标量、列、行、表子查询,常用于复杂查询场景。
|
算法 Java API
如何使用Java开发获得淘宝商品描述API接口?
本文详细介绍如何使用Java开发调用淘宝商品描述API接口,涵盖从注册淘宝开放平台账号、阅读平台规则、创建应用并申请接口权限,到安装开发工具、配置开发环境、获取访问令牌,以及具体的Java代码实现和注意事项。通过遵循这些步骤,开发者可以高效地获取商品详情、描述及图片等信息,为项目和业务增添价值。
429 10
|
资源调度 JavaScript 前端开发
window系统如何管理多版本node
window系统如何管理多版本node
600 0
|
SQL 缓存 大数据
C#高效处理大数据的批次处理,以及最好的数据库设计
C#高效处理大数据的批次处理,以及最好的数据库设计
716 0
|
开发框架 算法 .NET
C#使用MiniExcel导入导出数据到Excel/CSV文件
C#使用MiniExcel导入导出数据到Excel/CSV文件
771 0
|
存储 SQL 数据库
深入解析SQL中的聚集索引与非聚集索引
【8月更文挑战第31天】
765 0

热门文章

最新文章