c#事务机制

我们在软件开发中,时常会遇到这样的问题,就是一个操作会同时操作多个表或多个数据库。在处理这样的事件的时候,如果被操作表中有一个表操作失败,那么在没有使用事务的时候就会出现数据不完整,数据残缺。事务的使用就可以解决这样的问题。

事务有四个特性,第一原子性,事务具有独立的不能被拆分的,不能只做部分,事务的性质是要么全做,要么都不做。

第二统一性,在事务执行之前和事务执行之后的数据是一致。

第三隔离性,事务是独立的,开发者不能查看中间状态。对同一张表同一时间最多只能有一个事务处理。

第四永久性,事务的发生对数据库的影响是永久的。

在C#中第一种,在程序中添加事务。

第一步,创建事务的方法,一般是在业务逻辑层完成事务的开启,提交,异常回滚。在数据层里面创建事务。

在数据层里面创建数据库

private SqlConnection _sqlConnection= null; //数据库连接对象

/// <summary>

/// 创建一个数据库事务

/// </summary>

/// <returns>新的事务</returns>

public SqlTransactionCreateTransaction()

{

if (_sqlConnection == null)

{

_sqlConnection = newSqlConnection(_connectionString);

}

if(_sqlConnection.State ==ConnectionState.Closed) _sqlConnection.Open();

return_sqlConnection.BeginTransaction();

}

第二步在业务逻辑层里面开启事务提交事务和异常回滚的操作

public static void Delete(int ID)

{

DbTransactiontrans = null; //使用事务方式:声明事务对象

try

{

DALd = new DAL();

trans= d.CreateTransaction(); //使用事务方式:创建事务

d.Delete(ID, trans); //使用事务方式:操作数据

//如果DAL组件返回代码不为0,说明操作错误。

if (d.ReturnCode != 0)

{

throw newException(d.ReturnMessage);

}

trans.Commit();//使用事务方式:提交事务

}

catch(Exceptionex)

{

trans.Rollback();//使用事务方式:回滚事务

throwex;

}

}

第三步,在数据层具体调用sqlHelper函数完成具体的操作

publicvoid Delete(int ID, DbTransaction myTransaction)

{

SqlParameter[] parameterValues =new SqlParameter[] { new SqlParameter("@ID", ID) };

using(SqlDataReader reader =SqlHelper.ExecuteReader((SqlTransaction)myTransaction,CommandType.StoredProcedure, "存储过程",参数))

{

while(reader.Read())

{

ReturnFromReader(reader);//读取返回符合条件的数据,这部分。

}

reader.Close();

}

需用在业务逻辑层,数据层上面添加了事务。这样就建立了事务机制。

数据事务多用于确保在数据库操作中保证数据库的数据一致性,数据事务使用在数据层,在数据表操作出现毛病的时候不会出现问题。

然而一些事务有关系到与业务范畴,这样的事务就应该在逻辑层中实现。在编写程序中逻辑层中做事务开启,提交,异常回滚和关闭。吧事务的实现

放在数据层。这样做的原因是因为,一次操作可能数据层会被多次调用,而逻辑层仅仅需要一次调用。

逻辑层使用事务,则需要在逻辑层打开和关闭数据库,这样使得程序的耦合度变高。对于这种情况通过事务独立成立来降低这种耦合度。

在一般常用的具体事务主要实现数据库连接,开启事务处理和关闭连接的操作。


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值