【批量添加】-SqlBulkCopy语句

本文涉及的产品
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
云数据库 RDS SQL Server,基础系列 2核4GB
简介: 【批量添加】-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语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS&nbsp;SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/sqlserver
目录
相关文章
|
SQL 关系型数据库 MySQL
数据库中ISNULL,IFNULL,NULLIF 函数的区别是什么?
数据库中ISNULL,IFNULL,NULLIF 函数的区别
213 0
|
Java 数据库连接 API
使用PrepareStatement实现插入数据、查询数据、ResultSet和ResultSetMetaData及资源释放
使用PrepareStatement实现插入数据、查询数据、ResultSet和ResultSetMetaData及资源释放
161 0
SQL IFNULL()函数详细解析
SQL IFNULL()函数详细解析
227 0
SQL IFNULL()函数详细解析
使用RresultMap中collection做嵌套查询
注意:<collection>标签中的column:是要传递给select查询语句的参数,如果传递多个参数,格式为column= " {参数名1=表字段1,参数名2=表字段2}"
282 0
|
SQL 存储 Java
JDBC之通过ResultSet对象对结果集进行处理
JDBC之通过ResultSet对象对结果集进行处理