批量复制操作(SqlBulkCopy)的出错处理:事务提交、回滚
来源:互联网 发布:万方数据库英文怎么写 编辑:程序博客网 时间:2024/05/22 03:41
默认情况下,批量复制操作作为独立的操作执行。 批量复制操作以非事务性方式发生,不可能使其回滚。 如果需要在出错时回滚全部批量复制或它的一部分,可以使用 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 = 10; 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.aspxhttp://msdn.microsoft.com/zh-cn/partners/system.data.sqlclient.sqlbulkcopyoptions.aspx
原文:http://blog.csdn.net/jwdream2008/article/details/6191585
- 批量复制操作(SqlBulkCopy)的出错处理:事务提交、回滚
- 批量复制操作(SqlBulkCopy)的出错处理:事务提交、回滚
- 批量复制操作的事务和说明(SqlBulkCopy)
- ibatis 对事务和批量提交的处理,以及回滚的处理
- 在事务中执行批量复制操作SqlBulkCopy,SqlTransaction
- MySQL事务回滚rollback与提交commit的操作
- 关于SAP的事务提交和回滚(LUW)
- 关于SAP的事务提交和回滚(LUW)
- JDBC 事务的回滚 提交
- mysql事务的提交和回滚
- Postgresql 事务的提交与回滚
- Postgresql 事务的提交与回滚
- mysql 事务的提交和回滚
- jdbc事务回滚 批量操作数据 一个例子
- SqlbulkCopy批量复制数据
- SqlBulkCopy批量复制数据
- SqlbulkCopy批量复制数据
- SqlBulkCopy(批量复制)使用方法
- 该程序能够获得鼠标的X坐标,显示在文本框中:
- Java编写的双色球计算器(不使用IDE)
- 以下实例能够判断List控件中所选择的选项,并且输出显示在控制台中:
- python 装饰器 应用
- android 软键盘移动焦点 转载
- 批量复制操作(SqlBulkCopy)的出错处理:事务提交、回滚
- 打印杨辉三角,三角形,四边形
- poj 3667 Hotel
- Subversion安装成service
- OpenStack之Glance笔记(一)
- about the comma operator and expression
- 电脑自动断电
- 0802、0803日报
- 关于const的一点小花招