《.net事务 .doc》由会员分享,可在线阅读,更多相关《.net事务 .doc(8页珍藏版)》请在金锄头文库上搜索。
1、.net事务 在一个MIS系统中,没有用事务那就绝对是有问题的,要么就只有一种情况:你的系统实在是太小了,业务业务 逻辑有只要一步执行就可以完成了。因此掌握事务处理的方法是很重要,进我的归类在.net中大致有以下4种事务处理的方法。大家可以参考一下,根据实际选 择适当的事务处理。1 SQL事务 sql事务是使用SQL server自身的事务:在存储过程中直接使用Begin Tran,Rollback Tran,Commit Tran实现事务:优点:执行效率最佳限制:事务上下文仅在数据库中调用,难以实现复杂的业务逻辑。Demo:(所有demo,都以SQL Server自带的Northwind数据
2、的表Region为例)CREATEPROCEDUREdbo.SPTransaction(UpdateIDint,UpdateValuenchar(50),InsertIDint,InsertValuenchar(50)ASbeginTranUpdateRegionSetRegionDescription=UpdateValuewhereRegionID=UpdateIDinsertintoRegionValues(InsertID,InsertValue)declareRegionErrorintselectRegionError=errorif(RegionError=0)COMMITTra
3、nelseROLLBACKTranGO/SQL事务:/publicvoidSQLTran()SqlConnectionconn=newSqlConnection(DataSource=127.0.0.1;InitialCatalog=Northwind;PersistSecurityInfo=True;UserID=sa;Password=123;);SqlCommandcmd=newSqlCommand();cmd.CommandText=SPTransaction;cmd.CommandType=CommandType.StoredProcedure;cmd.Connection=conn
4、;conn.Open();SqlParameterparas=newSqlParameternewSqlParameter(UpdateID,SqlDbType.Int,32),newSqlParameter(UpdateValue,SqlDbType.NChar,50),newSqlParameter(InsertID,SqlDbType.Int,32),newSqlParameter(InsertValue,SqlDbType.NChar,50);paras0.Value=2;paras1.Value=UpdateValue1;paras2.Value=6;paras3.Value=Ins
5、ertValue1;foreach(SqlParameterparainparas)cmd.Parameters.Add(para);cmd.ExecuteNonQuery();2 ADO.net事务 A事务可能是大家一般都用的优点:简单,效率和数据库事务差不多。缺点:事务不能跨数据库,只能在一个数据库连接上。如果是两个数据库上就不能使用该事务了。Demo:/一般的ADO.net事务/publicvoidADONetTran1()SqlConnectionconn=newSqlConnection(DataSource=127.0.0.1;InitialCatalog=Northwind;Pe
6、rsistSecurityInfo=True;UserID=sa;Password=123;);SqlCommandcmd=newSqlCommand();trycmd.CommandText=UpdateRegionSetRegionDescription=UpdateValuewhereRegionID=UpdateID;cmd.CommandType=CommandType.Text;cmd.Connection=conn;conn.Open();SqlParameterparas=newSqlParameternewSqlParameter(UpdateID,SqlDbType.Int
7、,32),newSqlParameter(UpdateValue,SqlDbType.NChar,50);paras0.Value=2;paras1.Value=UpdateValue12;foreach(SqlParameterparainparas)cmd.Parameters.Add(para);/开始事务cmd.Transaction=conn.BeginTransaction();cmd.ExecuteNonQuery();cmd.CommandText=insertintoRegionvalues(InsertID,InsertValue);cmd.CommandType=Comm
8、andType.Text;paras=newSqlParameternewSqlParameter(InsertID,SqlDbType.Int,32),newSqlParameter(InsertValue,SqlDbType.NChar,50);paras0.Value=7;paras1.Value=InsertValue;cmd.Parameters.Clear();foreach(SqlParameterparainparas)cmd.Parameters.Add(para);cmd.ExecuteNonQuery();/提交事务cmd.Transaction.Commit();cat
9、ch/回滚事务cmd.Transaction.Rollback();throw;finallyconn.Close();3 TransactionScope事务 TransactionScope事务类,它可以使代码块成为事务性代码。并自动提升为分布式事务优点:实现简单,同时能够自动提升为分布式事务Demo:/TransactionScope事务:可自动提升事务为完全分布式事务的轻型(本地)事务。/使用时要保证MSDTC服务(控制分布事务)是开启的可以使用:netstartmsdtc命令开启服务;/publicvoidADONetTran2()SqlConnectionconn=newSqlConnection(DataSource=127.0.0.1;InitialCatalog=Northwind;PersistSecurityInfo=True;UserID=sa;Password=123;);SqlCommandcmd=newSqlCommand();tryusing(System.Transactions.TransactionScopets=newTransactionScope()cmd.CommandText=Upda