在使用ADO.NET时,如果自己弄事务,代码一般是这样的:
public void Transaction()
{
SqlTranHelper sqlTranHelper = new SqlTranHelper();
try
{
sqlTranHelper.BeginTransaction();
//事务操作
sqlTranHelper.CommitTransaction();
}
catch (Exception ex)
{
sqlTranHelper.RollBackTransaction();
}
finally
{
sqlTranHelper.EndTransaction();
}
}
我们要在try里面的BeginTransaction与CommitTransaction之间写各式各样的事务代码。
在这个方法里,除了“事务代码”,其它多余的代码,在每个使用事务的地方,都不可避免的要重写。
于是我利用了委托,做了一个委托方法(做成静态方法):
public static string Transaction(Action<System.Data.SqlClient.SqlTransaction> op)
{
string Message = "Error!";
SqlTranHelper sqlTranHelper = new SqlTranHelper();
try
{
sqlTranHelper.BeginTransaction();
op(sqlTranHelper.Trans);
sqlTranHelper.CommitTransaction();
Message = "";
}
catch (Exception ex)
{
sqlTranHelper.RollBackTransaction();
if (!string.IsNullOrEmpty(ex.Message))
{
Message = ex.Message;
}
}
finally
{
sqlTranHelper.EndTransaction();
}
return Message;
}
有了这个方法,以后做“事务”,就简单了(多行代码,简化成2行了):
string Message = SqlHelper.Transaction(tran=>{
//在这里写事务代码
});
reVal = string.IsNullOrEmpty(Message);//如果事务执行出错,Message才有值。