ADO.NET两种事务处理方法
第一种是SqlTransaction类事务处理,基于.NET代码上的事务处理。详细信息访问:http://www.cnblogs.com/windows/articles/1605636.htm
优点不用说,缺点是:
– 事务执行在数据库连接层上,所以需要在事务过程中维护一个数据库连接。
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Data.SqlClient;
using System.Transactions;
namespace dotNET数据访问
{
public partial class 事务处理 : System.Web.UI.Page
{
string conn = "Data Source=.;Initial Catalog=test;Integrated Security=True";
SqlConnection con;
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
con = new SqlConnection(conn);
con.Open();
//启动一个事务。
SqlTransaction myTran = con.BeginTransaction();
SqlCommand myCom = new SqlCommand();
myCom.Connection = con;
myCom.Transaction = myTran;
try
{
myCom.CommandText = "insert into fenye(value) values(‘zz‘)";//这条没有插入数据库
myCom.ExecuteNonQuery();
myCom.CommandText = "insert into fenye2(value) values(‘zz2‘)";
myCom.ExecuteNonQuery();
myTran.Commit();
Response.Write("成功执行!1");
}
catch (Exception Ex)
{
myTran.Rollback();
//创建并且返回异常的错误信息
Response.Write(Ex.ToString());
Response.Write("写入数据库失败");
}
finally
{
con.Close();
}
}
protected void Button2_Click(object sender, EventArgs e)
{
using (TransactionScope tsCope = new TransactionScope())
{
using (con = new SqlConnection(conn))
{
SqlCommand cmd = new SqlCommand("insert into fenye(value) values(‘zz‘)", con);
con.Open();
cmd.ExecuteNonQuery();
}
using (con = new SqlConnection(conn))
{
SqlCommand cmd = new SqlCommand("insert into fenye2(value) values(‘zz2‘)", con);
con.Open();
cmd.ExecuteNonQuery();
}
Response.Write("执行成功!2");
tsCope.Complete();
}
}
}
}
第二种事务使用TransactionScope类,用来弥补第一种事务的缺点。详细信息访问:http://www.cnblogs.com/zhangpengshou/archive/2009/07/20/1527269.html
注意使用第二种事务前,先引用System.Transactions.dll,然后命名空间引用。还要确保电脑上开启了DTC服务。开启方法访问:
依存关系:Remote Procedure Call(RPC)和Security Accounts Manager
建议:一般家用计算机涉及不到,除非你启用Message Queuing服务,可以停止。
注:如果在第1步Distributed Transaction Coordinator 无法启动,则是因为丢失了日志文件,重新创建日志文件,再启动就行了。重新创建
MSDTC 日志,并重新启动服务的步骤如下:
(1) 单击"开始",单击"运行",输入 cmd 后按"确定"。
(2) 输入:msdtc
-resetlog (注意运行此命令时,不要执行挂起的事务)
(3) 最后输入:net start msdtc
回车,搞定!
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。