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();

}

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

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

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

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

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

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



原创粉丝点击