SQL应用(sqlbulkcopy整表复制)


前言

在前端软件需要对SQL数据库进行写入时,如:【Insert into……】
此时可以用sqlbulkcopy进行整表复制到SQL数据库。


一、【sqlbulkcopy】对比【Insert into】优缺点

优点:
  1. 同等数量数据,【sqlbulkcopy】上传数据比【insert into】要快,而且节省资源;
  2. 比【insert into】更安全完整传输数据;
  3. 若原数据为表格式【DataTable】的方式,使用【sqlbulkcopy】可直接上传到数据库。
缺点:
  1. 若数据量不大,且不是整表的方式时,需要新建DataTable,将数据存放,然后在使用【sqlbulkcopy】将整理的数据表上传;
  2. 在插入数据时,若使用【sqlbulkcopy】,则不能对整个上传过程进行干预。

综述:【sqlbulkcopy】适合在数据量大或已有整表数据待上传时使用


二、使用方法

1.引入库

代码如下(示例):

 using System.Data.SqlClient;

2.【sqlbulkcopy属性及设置】

属性 参数类型 描述
BulkCopyTimeout int 超时时间设置
DestinationTableName string 目标表格名称
WriteToServer DataTable 待上传数据表格
SqlBulkCopyOptions 属性设置:
参数 描述
CheckConstraints 插入数据时检查约束
FireTriggers 插入数据时激活目标表格触发器
default 使用默认设置
SqlBulkCopyOptions的属性设置主要有以上几项,尤其【FireTriggers】属性值设置用得比较广泛,用于激活数据库原有触发器。

3.使用示例

代码如下(示例):

 1. string connectionStr = "Data Source=【server】;Initial Catalog=【Datasource】;Integrated Security=False;user id=user;Password='password'";
 
 2. SqlBulkCopy SBC = new SqlBulkCopy(connectionStr, SqlBulkCopyOptions.FireTriggers);
 
 3. SBC.DestinationTableName = 【SQL-Table】;    //上传数据库目标表名
 
 4. SBC.BulkCopyTimeout = 2000;   	//等待超时设置
 
 5. SBC.WriteToServer(【DataTable】);	//将DataTable内容写入数据库

【SqlBulkCopyOptions.FireTriggers】为激活SQL数据库触发器属性。


总结

  1. 【sqlbulkcopy】为大量数据写入数据库提供了高效的方式;
  2. 【sqlbulkcopy】运用时,应区分是否需要激活触发器;
  3. 【sqlbulkcopy】上传数据表时,构造上传的数据表DataTable与SQL数据表中的Table格式务必一致,否则将会以添加的形式上传。

你可能感兴趣的:(SQL数据库,sql,数据库,c#)