asp.net 事物处理
第一次写博客,因为只是小白,所以现在只是把博客做为一个笔记本以加深印象和以后方便查找。
今天因为需要必须使用这种事物,也就是在同一个方法中对数据库进行多次操作,并且不能放在一个存储工程进行一次执行。在网上查到了这个方法,很汗颜的是我只用这个方式实现了我的目的,具体原理还是不清楚。哈哈,总之会用了。使用这种事物的时候要注意几个地方:
1.必须引用命名空间System.EnterpriseServices
2.ContextUtil.SetComplete();//提交事务
3.ContextUtil.SetAbort();//回滚事务
4.ServiceDomain.Leave();
前边说了,这个事物我只局限于达到了我的目的。所以提交和回滚两个方法很容易理解,我没有注意到ServiceDomain.Leave(),不知道起什么作用。我以为已经实现了回滚,正高兴的时候,在查询的时候linq报错了。经过查看发现,数据根本没有存储到数据库。当把ServiceDomain.Leave()添加上后才正真的实现了我的目的。
using System.EnterpriseServices;
private void GetImport(HttpContext context)
{
ServiceConfig config = new ServiceConfig();
config.Transaction = TransactionOption.Required;
ServiceDomain.Enter(config);
string resultJson = "";
try
{
string sql1="insert into testTable1(name,sex,age) value('张三','男',23)";
SqlHelper.ExecuteNonQuery(SqlHelper.GetConnSting(),CommandType.Text,sql1);
string sql2="insert into testTable2(company,name,tell) value('阿里巴巴','马云','13266666666')";
SqlHelper.ExecuteNonQuery(SqlHelper.GetConnSting(),CommandType.Text,sql2);
string sql3="insert into testTable3(project,adress,tell) value('xx项目','重庆,'15988888888')";
SqlHelper.ExecuteNonQuery(SqlHelper.GetConnSting(),CommandType.Text,sql3);
resultJson="添加成功!";
ContextUtil.SetComplete();//提交事务
}
catch (Exception e)
{
resultJson = e.Message;
ContextUtil.SetAbort();//回滚事务
}
finally
{
ServiceDomain.Leave();
}
context.Response.Write(resultJson);
}