如題。

解决方案 »

  1.   

    現在的數據訪問層,我個人認為,有一些問題,
    事務放在bll層,
    事務起始也是放在bll層
    中間執行一堆代碼。
    如果不拋異常就commit,否則就rollback。dal層調用數據訪問層,是傳param進去,沒有傳鏈接字符串進去,目的,想很多操作工用一個鏈接
    。呵呵,就出現很多這些事務未提交的問題。
      

  2.   

    qiule :静态方法不适宜被多次调用?那写静态方法的目的是什么你明白么?
    某个方法就是因为会经常使用,为了避免创建对象所耗费的资源
    才写成静态的
    .......
      

  3.   

    Dal不是靜態的,只有數據訪問層用靜態的。
    bll也不是靜態訪問方法。
    上面很多朋友說,靜態方法慎用,能否舉一實例呢
    靜態方法里面有事務,我們有一些問題。
    不同的iis鏈接進去,怎么會公用一個鏈接呢,
    “事務未提交,”我們一定所有的地方都寫commit啦
      

  4.   

    happy happy 欢迎大伙来C# / .Net 7729746 交流社团 聊技术,项目合作。Blogs http://zhoufleru.cnblogs.com   
      

  5.   

      public void Insert(List<ImpBWDetailInfo> obj)
            {
                //增加要調用Order業務層相應方法            SqlHelper.OpenTrans();
                try
                {
                    #region 給SetOrder部分賦值
                         SetOrder.Instance.Edit((SetOrderInfo)obj[0]);
                    #endregion
                    #region 給SetOrder State
                    if (obj[0].impOrderState == ImportOrderState.ReDateOrder)
                    {
                        SetOrderStateInfo modState = new SetOrderStateInfo();                  
                        SetOrderState.Instance.Insert(modState);
                    }
                    #endregion
                    #region 給SetOrder Today                SetOrderTodayInfo todayObj = new SetOrderTodayInfo(obj[0].OrderNo, obj[0].ServType, obj[0].CommitDate, createBy);
                    SetOrderToday.Instance.Edit(todayObj);                #endregion                //BW存在一對多情況,因此,setorder只需要一條記錄
                    for (int i = 0; i < obj.Count; i++)
                    {
                        if (i == 0)
                            dal.Edit(obj[0]);
                        else
                            dal.EditNotOne(obj[i]);
                    }
                    //dal.Edit(obj[0]);
                    for (int i = 0; i < obj.Count; i++)
                    {
                        succeedImp.Add(obj[i]);
                    }
                }
                catch
                {
                    //回滾事務
                    SqlHelper.RollbackTrans();
                    for (int i = 0; i < obj.Count; i++)
                    {
                        errImp.Add(obj[i]);
                    }
                    //continue;
                }
                //提交事務
                SqlHelper.CommitTrans();
            }
      

  6.   

    上面是bll層的代碼。
    dal層,類似
          public void Insert(SetOrderStateInfo cSetOrderStateInfo)
            {
                SqlHelper.ExecuteNonQuery(SqlHelper.ConnectionString, CommandType.Text, CSetOrderState_INSERT_SQL, GetInsertCSetOrderStateParameters(cSetOrderStateInfo));
            }