事务有四个特性,第一原子性,事务具有独立的不能被拆分的,不能只做部分,事务的性质是要么全做,要么都不做。
第二统一性,在事务执行之前和事务执行之后的数据是一致。
第三隔离性,事务是独立的,开发者不能查看中间状态。对同一张表同一时间最多只能有一个事务处理。
第四永久性,事务的发生对数据库的影响是永久的。
在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();
}
需用在业务逻辑层,数据层上面添加了事务。这样就建立了事务机制。
数据事务多用于确保在数据库操作中保证数据库的数据一致性,数据事务使用在数据层,在数据表操作出现毛病的时候不会出现问题。
然而一些事务有关系到与业务范畴,这样的事务就应该在逻辑层中实现。在编写程序中逻辑层中做事务开启,提交,异常回滚和关闭。吧事务的实现
放在数据层。这样做的原因是因为,一次操作可能数据层会被多次调用,而逻辑层仅仅需要一次调用。
逻辑层使用事务,则需要在逻辑层打开和关闭数据库,这样使得程序的耦合度变高。对于这种情况通过事务独立成立来降低这种耦合度。
在一般常用的具体事务主要实现数据库连接,开启事务处理和关闭连接的操作。