您的位置:首页 > 其它

读书笔记:《亮剑 .Net》——System.Transactions 事务处理

2009-07-24 14:49 531 查看
使用System.Transactiions不需要考虑是简单事务还是分布式事务。

在SQL Server 2005下.Net会创建一个Local Transaction,性能非常高。但是如果是SQL Server 2000,则会自动激发一个分布式事务,在性能上会受一些损失

using (TransactionScope ts = new TransactionScope())//使整个代码块成为事务性代码
{
#region 在这里编写需要具备Transaction的代码
string msg = "";
string conString = "data source=127.0.0.1;database=codematic;user id=sa;password=";
SqlConnection myConnection = new SqlConnection(conString);
myConnection.Open();
SqlCommand myCommand = new SqlCommand();
myCommand.Connection = myConnection;
try
{
myCommand.CommandText = "update P_Product set Name='电脑2' where Id=52";
myCommand.ExecuteNonQuery();
myCommand.CommandText = "update P_Product set Name='电脑3' where Id=53";
myCommand.ExecuteNonQuery();

msg = "成功!";
}
catch (Exception ex)
{
msg = "失败:" + ex.Message;
}
finally
{
myConnection.Close();
}
#endregion

ts.Complete();
return msg;
}

嵌套的事务处理

void RootMethod()
{
using (TransactionScope scope = new TransactionScope())
{
//操作代码
SonMethod();
scope.Complete();
}
}
void SonMethod()
{
using (TransactionScope scope = new TransactionScope())
{
//操作代码
scope.Complete();
}
}

事务范围

如果想保留代码部分执行的操作,并在失败的情况下不希望终止环境事务使用TransactionScopeOption.Suppress

void MethodSuppress()
{

using (TransactionScope scope1 = new TransactionScope())
{
try
{
//开始一个非事务范围
using (TransactionScope scope2 = new TransactionScope(TransactionScopeOption.Suppress))
{
//不受事务控制代码
}
//从这里开始又回归事务处理
}
catch
{ }
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: