|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
SqlConnection sqlConn = new SqlConnection( sourceConnection) ;
sqlConn.Open() ;
SqlTransaction tran = sqlConn.BeginTransaction();
SqlCommand commandInsert = new SqlCommand("insert into [test_sqlbulk_update]( b ) values (1) ", sqlConn, tran);
int result = commandInsert.ExecuteNonQuery();
SqlCommand commandSourceData = new SqlCommand("select * from test_sqlbulk ", sqlConn, tran);
SqlDataReader reader = commandSourceData.ExecuteReader();
// Set up the bulk copy object using the KeepIdentity option.
using (SqlBulkCopy bulkCopy = new SqlBulkCopy(sqlConn, SqlBulkCopyOptions.KeepIdentity, tran))
{
bulkCopy.BatchSize = 2;
bulkCopy.DestinationTableName =
"dbo.test_sqlbulk_des";
// Write from the source to the destination.
// This should fail with a duplicate key error
// after some of the batches have been copied.
try
{
bulkCopy.WriteToServer(reader);
reader.Close();
tran.Commit();
}
catch (Exception ex)
{
reader.Close();
tran.Rollback();<br> // tran.Commit(); 异常仍提交执行,同时注释上一行。
}
}
|
=> 异常时执行 rollback, 最终结果:没做任何修改.
=> 外部事务,Catch 中执行 Commint ,发生异常,因为自动回滚了,但在Catch 执行 Rollback 无异常。