前言
在前端软件需要对SQL数据库进行写入时,如:【Insert into……】
此时可以用sqlbulkcopy进行整表复制到SQL数据库。
一、【sqlbulkcopy】对比【Insert into】优缺点
- 同等数量数据,【sqlbulkcopy】上传数据比【insert into】要快,而且节省资源;
- 比【insert into】更安全完整传输数据;
- 若原数据为表格式【DataTable】的方式,使用【sqlbulkcopy】可直接上传到数据库。
- 若数据量不大,且不是整表的方式时,需要新建DataTable,将数据存放,然后在使用【sqlbulkcopy】将整理的数据表上传;
- 在插入数据时,若使用【sqlbulkcopy】,则不能对整个上传过程进行干预。
综述:【sqlbulkcopy】适合在数据量大或已有整表数据待上传时使用。
二、使用方法
1.引入库
代码如下(示例):
using System.Data.SqlClient;
2.【sqlbulkcopy属性及设置】
属性 | 参数类型 | 描述 |
---|---|---|
BulkCopyTimeout | int | 超时时间设置 |
DestinationTableName | string | 目标表格名称 |
WriteToServer | DataTable | 待上传数据表格 |
参数 | 描述 |
---|---|
CheckConstraints | 插入数据时检查约束 |
FireTriggers | 插入数据时激活目标表格触发器 |
default | 使用默认设置 |
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数据库触发器属性。
总结
- 【sqlbulkcopy】为大量数据写入数据库提供了高效的方式;
- 【sqlbulkcopy】运用时,应区分是否需要激活触发器;
- 【sqlbulkcopy】上传数据表时,构造上传的数据表DataTable与SQL数据表中的Table格式务必一致,否则将会以添加的形式上传。