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属性及设置】

属性参数类型描述
BulkCopyTimeoutint超时时间设置
DestinationTableNamestring目标表格名称
WriteToServerDataTable待上传数据表格
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格式务必一致,否则将会以添加的形式上传。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您可以使用以下步骤将SQL Server表数据复制到Oracle: 1. 在Oracle数据库中创建一个新的表,与SQL Server表具有相同的结构。 2. 在SQL Server中打开查询窗口,编写一个SELECT语句来获取要复制的数据。 3. 使用SqlDataReader对象读取SELECT语句的结果。 4. 使用Oracle.DataAccess.Client命名空间中的OracleBulkCopy类将数据复制到Oracle表中。 以下是示例代码: ``` // SQL Server连接字符串 string sqlConnectionString = "Data Source=myServerAddress;Initial Catalog=myDataBase;User Id=myUsername;Password=myPassword;"; // Oracle连接字符串 string oracleConnectionString = "Data Source=myOracleDataSource;User Id=myUsername;Password=myPassword;"; // 要复制SQL Server表 string sqlTableName = "myTable"; // 在Oracle中创建表 string createTableSql = "CREATE TABLE myTable (column1 varchar2(50), column2 number(10,2), column3 date)"; using (SqlConnection sqlConnection = new SqlConnection(sqlConnectionString)) { sqlConnection.Open(); // 获取要复制的数据 string selectSql = "SELECT column1, column2, column3 FROM " + sqlTableName; SqlCommand sqlCommand = new SqlCommand(selectSql, sqlConnection); SqlDataReader sqlDataReader = sqlCommand.ExecuteReader(); using (OracleConnection oracleConnection = new OracleConnection(oracleConnectionString)) { oracleConnection.Open(); // 在Oracle中创建表 OracleCommand oracleCommand = new OracleCommand(createTableSql, oracleConnection); oracleCommand.ExecuteNonQuery(); // 使用OracleBulkCopy将数据复制到Oracle表中 OracleBulkCopy oracleBulkCopy = new OracleBulkCopy(oracleConnection); oracleBulkCopy.DestinationTableName = "myTable"; oracleBulkCopy.WriteToServer(sqlDataReader); } } ``` 请注意,您需要安装Oracle.DataAccess NuGet包才能使用OracleBulkCopy类。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值