交易范围和多个地区
本文关键字:地区 范围 交易 | 更新日期: 2023-09-27 18:11:05
事务范围是否跨多个区域操作?如果我有2个进程,其中一个打开连接和事务,执行插入命令,然后在事务关闭之前调用另一个进程,如果事务2失败,原始事务会考虑吗?下面是示例代码:
地区1:
public static void process1()
{
using (SqlConnection conn = new SqlConnection(Connections.conn()))
{
//Open the connection
conn.Open();
try
{
//Create A new Sql transaction.
using (var trans = new System.Transactions.TransactionScope())
{
using (SqlCommand insert = new SqlCommand
{
CommandType = CommandType.Text,
CommandText = sql,
Connection = conn,
CommandTimeout = 300
})
{
insert.ExecuteNonQuery();
}
process2()
trans.complete();
}
}
catch (System.Data.SqlClient.SqlException ex)
{
string msg = "Insert Error:";
msg += ex.Message;
throw new Exception(msg);
}
}
}
地区2
public static void process2()
{
using (SqlConnection conn = new SqlConnection(Connections.conn()))
{
//Open the connection
conn.Open();
try
{
//Create A new Sql transaction.
using (var trans2 = new System.Transactions.TransactionScope())
{
using (SqlCommand insert = new SqlCommand
{
CommandType = CommandType.Text,
CommandText = sql,
Connection = conn,
CommandTimeout = 300
})
{
insert.ExecuteNonQuery();
}
trans2.complete();
}
}
catch (System.Data.SqlClient.SqlException ex)
{
string msg = "Insert Error:";
msg += ex.Message;
throw new Exception(msg);
}
}
}
在我的应用程序中,进程2取决于进程1的成功。如果进程1成功而进程2不成功,那么进程1的结果是无用的。
我明白,当命令在同一事务块中执行时,如果一个这样做,它们都会失败,但当我编码我的应用程序以跨不同区域执行时,我想知道是否同样适用于这种情况。我宁愿不重新编写两个不同的进程在一起。
提前感谢,
丹如果这只是一个c#文件中的两个代码块,那么为了确保两个进程都发生或都不发生,您也会希望将对这些函数的调用包装在事务作用域中。像这样:
using (var tx = new TransactionScope()) {
process1();
process2();
tx.Complete();
}
这样,如果process1或process2失败,两者都将回滚。