.net事务(1、SqlTransaction)

作者:青岛澄润国际贸易有限公司 来源:www.usabcc.com 发布时间:2017-09-15 10:14:29
.net事务(1、SqlTransaction) 概述

.net开发程序中,使用事务的方法有4中,分别为:数据库管理系统中的事务(SQL代码) ;.net中的SqlTransaction;.net中的Com+事务;.net中的TransactionScope。
对于数据库管理系统中的事务和Com+事务,在这里就不讲,主要讲解的为SqlTransaction和TransactionScope,本片博客讲解的是SqlTransaction,下一篇博客讲解TransactionScope,接下了接入我们本片博客的主题:SqlTransaction。

应用程序事务和数据库管理系统事务的区别 论述

概述中已经讲解了.net开发中实现事务的几种方式,当然,如果我们从另一个角度上看,专题,事务的实现就两种方式:应用程序事务和数据库管理系统事务。

应用程序事务是在应用程序中通过代码控制事务的开启,数据库管理系统的事务主要是通过书写存储过程来创建的,两种方式都可以实现事务,但是,从数据库的迁移和应用程序后期的维护上说,应用程序事务更好,当然,凑够效率上说,事务写在数据库管理系统上更好,但是从它的缺点和现在计算机的硬件发展来说,显然它的这个优点不太突出了。

数据的迁移

事务写在数据库管理系统上时,如果你想将该数据库(MS SQL)搬迁到Oracle数据库管理系统上,那么其事务(存储过程)可能在Oracle中不兼容(系统提供的方法等不全部一样),但是,如果你将事务写在程序中就不存在这种情况。

后期的维护

用到事务的时候,最简单的也是多个表的操作(一个表的操作没有意义),意思就是说,事务的逻辑性很强,如果我们将事务写在数据库管理系统上,那么开发人员再看程序代码的时候,是无法清楚的了解事务内部的逻辑的,此时矛盾出现了,因为有时,我们维护人员不得不去了解这种逻辑,这样的话,我们还要查看里面相应的T-Sql语句,是一个非常麻烦的过程,但是,如果我们将事务写在应用程序中,那么我们在看代码的过程中就已经把事务中的逻辑了解了,因为应用程序中事务的逻辑是通过应用程序代码

建议

那种不会学哪种,两种都不会,先学数据库中的事务,都会之后,用应用程序中的事务。


代码 OperateDataBase类 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Data; using System.Data.SqlClient; using System.Configuration; namespace 事务.普通事务 { public class OperateDataBase { #region 创建SqlConnection public SqlConnection CreateSqlConnection() { SqlConnection sqlCon = new SqlConnection(ConfigurationManager .ConnectionStrings ["strCon"].ToString ()); sqlCon.Open(); return sqlCon; } #endregion #region 添加数据 public int Execute(SqlConnection sqlCon,string strSql,SqlTransaction tran) { SqlCommand sqlCmd = new SqlCommand(strSql, sqlCon, tran); return sqlCmd.ExecuteNonQuery(); } #endregion } } main所在类(控制台应用程序)

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Data.SqlClient; namespace 事务.普通事务 { class Program { static void Main(string[] args) { OperateDataBase operateDataBase = new OperateDataBase(); using (SqlConnection sqlCon = operateDataBase.CreateSqlConnection()) { //开启事务 SqlTransaction tran = sqlCon.BeginTransaction(); string strSql1 = "insert into DataTable1(id,name) values(21,'张三')"; string strSql2 = "insert into DataTable2(id,name) values(21,'张三')"; try { operateDataBase.Execute(sqlCon, strSql1, tran); operateDataBase.Execute(sqlCon, strSql2, tran); //提交事务 tran.Commit(); } catch (Exception) { //回滚事务 tran.Rollback(); } } } } }

应用SqlTransaction时,三层架构中的代码分布

上面的也讲到过,应用在一张表的事务几乎很少见,大多都是多张表,但是由于SqlTransaction的特殊性,事务的范围在连接对象内,所以,在三层架构中应用该类的时候,应该在B层进行事务的控制,B层给D的东西,多了一个数据库连接对象和事务对象,此时需要注意,数据库连接对象是在D层创建的,只不过他先返回到了B层。


总结


企业建站2800元起,携手武汉肥猫科技,做一个有见地的颜值派!更多优惠请戳:仙桃SEO http://xiantao.4567w.com

  • 上一篇:Python抓取电影来了(dianying.fm)
  • 下一篇:最后一页
  •