• Asp.net 在三层架构中事务的使用



             再我知道的.net中,执行事务有两种方法,一种是自动事物,使用起来相当简单,但是需要配置服务器,如果你用的是web共享主机,即没有权限配置自己的服务器,那就没必要用这种了,接下了我讲下.net中最普通的事务SqlTransaction。

             接触3层也有一段时间了,了解水平一般,前段时间在想在三层中怎么使用事务呢,放在哪呢?Sqlherper ?    DAL?   BLL?。然后我就疯狂的百度,好几次都是未果(因为做的都是小项目,不用事务也关系不大),今天我再次查时,好好的看了csdn上的以讨论,http://topic.csdn.net/u/20091101/19/f21697d7-8f0c-4eb3-8e59-d0fe2f0b04b0.html,结合前辈和高手们的意见,自己改了一个出来。我的想法是将事务逻辑写在业务逻辑层,数据库的处理还都是在SQLHELPER,BLL层通过事务SqlTransaction传值访问DAL,再访问Sqlhelper。接下来是分块的代码。

    Sqlhelper:

     1 private static SqlConnection Cnn = new SqlConnection(DbConfig.ConnectionString);
    2
    3 #region 判读SqlConnection 是否开启连接 并开启
    4 /// <summary>
    5 /// 判读SqlConnection 是否开启连接 并开启
    6 /// </summary>
    7 /// <returns>返回SqlConnection</returns>
    8 private static SqlConnection GetCnn()
    9 {
    10 if (Cnn.State == ConnectionState.Closed)
    11 {
    12 Cnn.Open();
    13 }
    14 return Cnn;
    15 }
    16 #endregion
    17
    18 #region 关闭数据库连接
    19 /// <summary>
    20 /// 关闭数据库连接
    21 /// </summary>
    22 public static void CloseCnn()
    23 {
    24 Cnn.Close();
    25 }
    26 #endregion
    27
    28 #region 产生一个事务并开始
    29 /// <summary>
    30 /// 产生一个事务并开始
    31 /// </summary>
    32 /// <returns>返回此事务</returns>
    33 public static SqlTransaction BeginTransaction()
    34 {
    35 SqlTransaction tran = GetCnn().BeginTransaction();
    36 return tran;
    37 }
    38 #endregion


     

    DAL:

    1 public bool test(int i,SqlTransaction tran)
    2 {
    3 string sql = "insert into [test]([item]) values(@i)";
    4 SqlParameter[] paras=new SqlParameter[]{new SqlParameter("@i",i)};
    5 return sqlhelper.ExecutenQuery(sql, paras, CommandType.Text, tran)>0;
    6 }

    BLL:

     1 UserDAO userdao = new UserDAO();
    2
    3
    4 public bool test()
    5 {
    6 using (SqlTransaction tran = SQLHelper.BeginTransaction())
    7 {
    8 try
    9 {
    10 userdao.test(2, tran);
    11 userdao.test(3, tran);
    12 tran.Commit(); return true;
    13 }
    14 catch
    15 {
    16
    17 tran.Rollback();
    18 return false;
    19 }
    20 finally
    21 {
    22 SQLHelper.CloseCnn();//关闭数据库连接
    23 }
    24 }
    25 }




    上述代码在此次测试中通过,若要用于真实项目中,请修改后再使用,还有本人水平一般,写的不到之处请大家见谅。欢迎大家指导指正。

  • 相关阅读:
    mysql重置root密码
    node.js和JavaScript的关系
    转Git仓库分支(Branch)和标签(Tag)
    Spring MVC @CookieValue注解(5)
    Spring MVC @RequestParam(5)
    Spring REST(4)
    Spring MVC @PathVariable注解(3)
    Spring MVC @RequestMapping注解详解(2)
    Spring MVC入门示例(1)
    spring @Transactional注解参数详解(13)
  • 原文地址:https://www.cnblogs.com/yyl8781697/p/SqlTransaction.html
Copyright © 2020-2023  润新知