假设我有一个Insert-button,我在其中有多个方法,在数据库中读取,插入和更新等。是否可以对所有这些被调用的方法使用单个事务?的像:
private void method_A(){/* doing tons of db stuff */}
private void method_B(){/*...*/}
private void method_C(){/*...*/}
//etc
protected void Insert_OnClick(object sender, EventArgs e)
{
//begin transaction
Method_A();
Method_B();
Method_C();
//end transaction
}
这种方式可行吗?从未使用过交易。 顺便说一句,如果重要,请使用MS Access数据库。
答案 0 :(得分:3)
不确定Access是否尊重交易,但您可以将呼叫包裹在TransactionScope
中。这隐式地将范围内的所有数据库活动添加到事务中:
protected void Insert_OnClick(object sender, EventArgs e)
{
using(TransactionScope tran = new TransactionScope())
{
Method_A();
Method_B();
Method_C();
tran.Complete();
}
}
答案 1 :(得分:2)
是的,您可以通过创建事务实例并将其传递到需要使用它的任何方法来使用单个事务。根据您提供的代码说明一些伪代码:一个链接:MSDN OleDbTransaction
protected void Insert_OnClick(object sender, EventArgs e)
{
//begin transaction
var connection = HoweverYoureManagingConnections();
using (var transaction = connection.BeginTransaction())//If using OleDb
{
try
{
var command = new OldDbCommand();
command.Transaction = transaction;
//Use passed in command object to issue your queries/inserts/updates in each method.
Method_A(command);
Method_B(command);
Method_C(command);
transaction.Commit();
}
catch(Exception ex)
{
//if there was an exception rollback.
transaction.Rollback();
}
}
}