c#事务机制
来源:互联网 发布:nginx配置多个ssl证书 编辑:程序博客网 时间:2024/06/15 18:55
我们在软件开发中,时常会遇到这样的问题,就是一个操作会同时操作多个表或多个数据库。在处理这样的事件的时候,如果被操作表中有一个表操作失败,那么在没有使用事务的时候就会出现数据不完整,数据残缺。事务的使用就可以解决这样的问题。
事务有四个特性,第一原子性,事务具有独立的不能被拆分的,不能只做部分,事务的性质是要么全做,要么都不做。
第二统一性,在事务执行之前和事务执行之后的数据是一致。
第三隔离性,事务是独立的,开发者不能查看中间状态。对同一张表同一时间最多只能有一个事务处理。
第四永久性,事务的发生对数据库的影响是永久的。
在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();
}
需用在业务逻辑层,数据层上面添加了事务。这样就建立了事务机制。
数据事务多用于确保在数据库操作中保证数据库的数据一致性,数据事务使用在数据层,在数据表操作出现毛病的时候不会出现问题。
然而一些事务有关系到与业务范畴,这样的事务就应该在逻辑层中实现。在编写程序中逻辑层中做事务开启,提交,异常回滚和关闭。吧事务的实现
放在数据层。这样做的原因是因为,一次操作可能数据层会被多次调用,而逻辑层仅仅需要一次调用。
逻辑层使用事务,则需要在逻辑层打开和关闭数据库,这样使得程序的耦合度变高。对于这种情况通过事务独立成立来降低这种耦合度。
在一般常用的具体事务主要实现数据库连接,开启事务处理和关闭连接的操作。
- c#事务机制
- c#事务机制
- 事务机制
- 事务机制
- 事务机制
- C#事务
- C#事务
- C#事务
- C#事务
- C#事务
- c# 事务
- c# 事务
- C#事务
- C# 事务
- C# 事务
- 事务机制与锁机制
- SQL事务机制
- Spring事务机制
- 大小端编程注意事项
- 客户端连接ORACLE的几种方法
- centos升级内核无法加载显卡驱动
- undo丢失且存在未提交事务的恢复
- Server Application Unavailable
- c#事务机制
- J2ME Jar文件无效
- Java多线程并发访问解决方案
- 判断两个矩形相交以及求出相交的区域(生成的相交矩形)
- 一年成为Emacs高手(像神一样使用编辑器)
- php 类中的静态属性与静态方法->static
- Zend Framework教程-MVC-Action(Zend_Controller_Action)
- 2011年.NET面试题总结---献给即将找工作的同行们
- [原创]Android中LocationManager的简单使用,获取当前位置