【转】批量复制操作(SqlBulkCopy)的出错处理:事务提交、回滚
原文地址:http://blog.csdn.net/westsource/article/details/6658109
默认情况下,批量复制操作作为独立的操作执行。 批量复制操作以非事务性方式发生,不可能使其回滚。 如果需要在出错时回滚全部批量复制或它的一部分,可以使用 SqlBulkCopy 托管的事务,在现有事务中执行批量复制操作,或者在 System.Transactions Transaction 中登记它。
由于不同批次在不同事务中执行,因此,如果在批量复制操作期间发生错误,则当前批次中的所有行都将被回滚,但以前批次中的行将保留在数据库中。 (在错误点之前复制的所有批次都被提交;回滚当前复制的批次,并且在处理任何其他批次前中止批量复制操作。)
比如:批量复制100条数据到数据库汇总,batchsize设置为10.则没10条数据复制作为一个事务,整个100条数据的复制操作被分割为10个独立的事务。如果复制到第56条数据时(第6个事务),出错了。则前50条数据提交到数据库中,只回滚出错的事务。
如果由于发生错误而需要回滚整个批量复制操作,或者批量复制应作为更大的可回滚进程的一部分执行,则可以将 SQLTransaction 对象提供给 SqlBulkCopy 构造函数.
示例:
using (SqlConnection destinationConnection = new SqlConnection(connectionString))
{
destinationConnection.Open(); using (SqlTransaction transaction = destinationConnection.BeginTransaction())
{
using (SqlBulkCopy bulkCopy = new SqlBulkCopy( destinationConnection, SqlBulkCopyOptions.Default,
transaction))
{
bulkCopy.BatchSize = ;
bulkCopy.DestinationTableName = "dbo.BulkCopyDemoMatchingColumns"; try
{
bulkCopy.WriteToServer(reader);
transaction.Commit();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
transaction.Rollback();
}
finally
{
reader.Close();
}
}
}
}
SqlBulkCopyOptions 属性成员:
| Default | 对所有选项使用默认值。 | |
| KeepIdentity | 保留源标识值。如果未指定,则由目标分配标识值。 | |
| CheckConstraints | 请在插入数据的同时检查约束。默认情况下,不检查约束。 | |
| TableLock | 在批量复制操作期间获取批量更新锁。如果未指定,则使用行锁。 | |
| KeepNulls | 保留目标表中的空值,而不管默认值的设置如何。如果未指定,则空值将由默认值替换(如果适用)。 | |
| FireTriggers | 指定后,会导致服务器为插入到数据库中的行激发插入触发器。 | |
| UseInternalTransaction | 如果已指定,则每一批批量复制操作将在事务中发生。如果指示了此选项,并且为构造函数提供了 SqlTransaction 对象,则发生 ArgumentException。 |
详细请查阅:
http://msdn.microsoft.com/zh-cn/dynamics/tchktcdk.aspx
http://msdn.microsoft.com/zh-cn/partners/system.data.sqlclient.sqlbulkcopyoptions.aspx
【转】批量复制操作(SqlBulkCopy)的出错处理:事务提交、回滚的更多相关文章
- JDBC事务提交/回滚实例
以下是使用事务教程中描述的提交和回滚的代码示例. 此示例代码是基于前面章节中完成的环境和数据库设置编写的. 复制并将以下示例代码保存到:CommitAndRollback.java 中,编译并运行如下 ...
- flask-sqlalchemy、pytest 的单元测试和事务自动回滚
flask-sqlalchemy.pytest 的单元测试和事务自动回滚 使用 flask-sqlalchemy 做数据库时,单元测试可以帮助发现一些可能意想不到的问题,像 delete-cascad ...
- MySql事务无法回滚的原因
使用MySQL时.假设发现事务无法回滚,但Hibernate.Spring.JDBC等配置又没有明显问题时.不要苦恼,先看看MySQL创建的表有没有问题.即表的类型. InnoDB和MyISAM是在使 ...
- springmvc注解式事务手动回滚
Spring的AOP事务管理默认是针对unchecked exception回滚(运行期异常,Runtime Exception),如果希望手动控制事务的回滚,可以通过 TransactionAspe ...
- Spring,SpringMvc配置常见的坑,注解的使用注意事项,applicationContext.xml和spring.mvc.xml配置注意事项,spring中的事务失效,事务不回滚原因
1.Spring中的applicationContext.xml配置错误导致的异常 异常信息: org.apache.ibatis.binding.BindingException: Invalid ...
- Spring事务管理——回滚(rollback-for)控制
探讨Spring事务控制中,异常触发事务回滚原理.文章进行了6种情况下的Spring事务是否回滚. 以下代码都是基于Spring与Mybatis整合,使用Spring声明式事务配置事务方法. 1.不捕 ...
- Spring AOP声明式事务异常回滚(转)
转:http://hi.baidu.com/iduany/item/20f8f8ed24e1dec5bbf37df7 Spring AOP声明式事务异常回滚 近日测试用例,发现这样一个现象:在业务代码 ...
- springmvc mybatis 声明式事务管理回滚失效,(checked回滚)捕捉异常,传输错误信息
一.知识点及问题 后端框架: Spring .Spring mvc .mybatis 业务需求: client先从服务端获取用户大量信息到client,编辑完毕之后统一Post至服务端,对于数据的改动 ...
- Spring AOP声明式事务异常回滚
近日测试用例,发现这样一个现象:在业务代码中,有如下两种情况,比如:throw new RuntimeException("xxxxxxxxxxxx"); 事物回滚throw ne ...
随机推荐
- 【BZOJ3940】【BZOJ3942】[Usaco2015 Feb]Censoring AC自动机/KMP/hash+栈
[BZOJ3942][Usaco2015 Feb]Censoring Description Farmer John has purchased a subscription to Good Hoov ...
- 搭建ssm的领悟
今天搭建了ssm,但是一直报错误 "Cannot load JDBC driver class 'com.mysql.jdbc.Driver" 我以为是版本的问题就换,以为是路径加 ...
- 【BZOJ】4002: [JLOI2015]有意义的字符串
题意 求$\left \lfloor \left( \frac{b+\sqrt{d}}{2} \right)^n \right \rfloor \pmod {7528443412579576937} ...
- PHP 随手记
这篇文章用来记录自己学习PHP过程中遇到的问题以及解决方法,随时遇到新的问题都会更新,方便以后查阅. 环境:ubuntu 14.10,php5,apache2 1.如何打开PHP报错信息? 解决方法: ...
- C#常用类笔记
1. Object类型转化为数组 object[] b = (object[])ArrayList.Adapter((Array)list).ToArray(typeof(object));
- easyui-conbotree树形下拉框。。。转
最近一直在研究这个树形的下拉选择框,感觉非常的有用,现在整理下来供大家使用: 首先数据库的表架构设计和三级菜单联动的表结构是一样,(父子关系) 1.下面我们用hibernate建一下对应的额实体类: ...
- Java json串生成及转bean
package com; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import j ...
- SSH配置与讲解
一.Struts 首先介绍Struts,在web项目中加入Struts的jar包,并在Web.xml中添加Struts的配置: <filter> <filter-name ...
- Mysql 行列转换
一.第一种 原数据表 转换后 DROP TABLE IF EXISTS tempdynamic; CREATE TEMPORARY TABLE tempdynamic ( SELECT p.fsPay ...
- gitlab使用有感之坚持
当老师请大二的学弟教我们使用这个软件的时候, 当时就吓坏我了,感觉好高大上的样子,全英文的,还有什么阿里云的服务器用来代码管理:心情一下子就不好了,感觉自己懂得东西好少啊,比学弟懂得都少,跟不上时代的 ...