public bool UpdateItemAndChanRefer(DataTable dtDisItemReferDiff, DataTable dtDisItemReferAdd, DataTable dtDisItemReferDelete,
            DataTable dtDisChanOld, DataTable dtDisChanNew, DataTable dtDisItemReferNew, string vItem, string vPeriod, DbTransaction RootDBT)
        {
            bool bResult = false;
            bool IsRootTranscation = false;

            try
            {
                //判斷是否有傳入Root Transcation 
                IsRootTranscation = (RootDBT == null) ? true : false;

                #region 啟動交易或指定RootTranscation

                if (IsRootTranscation)
                {
                    //獨立呼叫啟動Transcation
                    Conn = USEDB.CreateConnection();
                    Conn.Open();
                    DBT = Conn.BeginTransaction();
                }
                else
                {
                    DBT = RootDBT;
                }

                #endregion

                MaintainDisChanRefer BCODisChanRefer = new MaintainDisChanRefer(ConnectionDB);
                DataTable dtAvailableChan = null;
                ArrayList ParameterList = new ArrayList();
                ArrayList ParameterList2 = new ArrayList();

                //  處理刪除:dtDel
                if (dtDisItemReferDelete != null && dtDisItemReferDelete.Rows.Count > 0)
                {
                    #region
                    foreach (DataRow dr in dtDisItemReferDelete.Rows)
                    {
                        //a)呼叫MaintainDisItemRefer.DeleteDisItemRefer();
                        ParameterList.Clear();
                        ParameterList.Add(dr["ID"]);
                        ParameterList.Add(dr["DIS_NO"]);
                        ParameterList.Add(dr["ITEM"]);
                        ParameterList.Add(dr["PERIOD"]);
                        ParameterList.Add(dr["RITEM"]);
                        ParameterList.Add(dr["RPERIOD"]);
                        ParameterList.Add(dr["REFER_RATE"]);
                        ParameterList.Add(dr["UPDATEDATE"]);
                        ParameterList.Add(dr["UPDATEUID"]);
                        bResult = DeleteDisItemRefer(ParameterList, DBT);

                        //b)呼叫MaintainDisChanRefer.DeleteChanReferByReferItem();
                        if (dtDisChanOld != null)
                        {
                            foreach (DataRow dr2 in dtDisChanOld.Rows)
                            {
                                ParameterList2.Clear();
                                ParameterList2.Add(dr2["ID"]);//此處傳的ID無法使用,因為傳的是VDS_ALO_DIS_CHAN的,需要的是VDS_ALO_DIS_CHAN_REFER
                                ParameterList2.Add(dr["DIS_NO"]);
                                ParameterList2.Add(dr["ITEM"]);
                                ParameterList2.Add(dr2["CHAN_NO"]);
                                ParameterList2.Add(dr["PERIOD"]);
                                ParameterList2.Add(dr["RITEM"]);
                                ParameterList2.Add(dr["RPERIOD"]);
                                ParameterList2.Add(dr["REFER_RATE"]);
                                ParameterList2.Add(dr2["UPDATEDATE"]);
                                ParameterList2.Add(dr2["UPDATEUID"]);
                                bResult = BCODisChanRefer.DeleteChanReferByReferItem(ParameterList2, DBT);
                            }
                        }

                    }
                    #endregion
                }

                //  處理新增:dtAdd
                if (dtDisItemReferAdd != null && dtDisItemReferAdd.Rows.Count > 0)
                {
                    #region
                    if (dtDisChanNew == null || dtDisChanNew.Rows.Count <= 0)
                    {
                        MaintainDisRecord BCODisRecord = new MaintainDisRecord(ConnectionDB);
                        ParameterList.Clear();
                        ParameterList.Add(vItem);
                        ParameterList.Add(vPeriod);
                        dtAvailableChan = BCODisRecord.QueryForSelectDisChan(ParameterList);
                    }
                    else
                    {
                        dtAvailableChan = dtDisChanNew;
                    }

                    for (Int32 i = 0; i <= dtDisItemReferAdd.Rows.Count - 1; i++)
                    {
                        //20090804 added:先刪除
                        ParameterList.Clear();
                        ParameterList.Add(dtDisItemReferAdd.Rows[i]["DIS_NO"]);
                        ParameterList.Add(dtDisItemReferAdd.Rows[i]["ITEM"]);
                        ParameterList.Add(dtDisItemReferAdd.Rows[i]["PERIOD"]);
                        bResult = BCODisChanRefer.DeleteOldChanRefer(ParameterList, DBT);
                        break;
                    }


                    for (Int32 i = 0; i <= dtDisItemReferAdd.Rows.Count - 1; i++)
                    {
                        //1.逐筆建立商品參照檔資訊
                        ParameterList.Clear();
                        ParameterList.Add(dtDisItemReferAdd.Rows[i]["DIS_NO"]);
                        ParameterList.Add(dtDisItemReferAdd.Rows[i]["ITEM"]);
                        ParameterList.Add(dtDisItemReferAdd.Rows[i]["PERIOD"]);
                        ParameterList.Add(dtDisItemReferAdd.Rows[i]["RITEM"]);
                        ParameterList.Add(dtDisItemReferAdd.Rows[i]["RPERIOD"]);
                        ParameterList.Add(dtDisItemReferAdd.Rows[i]["REFER_RATE"]);
                        ParameterList.Add(dtDisItemReferAdd.Rows[i]["CREATEDATE"]);
                        ParameterList.Add(dtDisItemReferAdd.Rows[i]["CREATEUID"]);

                        bResult = CreateDisItemReferFor111(ParameterList, DBT);
                    }

                    for (Int32 i = 0; i <= dtDisItemReferNew.Rows.Count - 1; i++)//因為在此之前會做全部刪除的動作,但dtDisItemReferAdd不會記錄未變更的筆數,所以傳入dtDisItemReferNew
                    {
                        //2.建立品項通路參照資訊
                        for (Int32 k = 0; k <= dtAvailableChan.Rows.Count - 1; k++)
                        {
                            ParameterList2.Clear();
                            ParameterList2.Add(dtDisItemReferNew.Rows[i]["DIS_NO"]);
                            ParameterList2.Add(dtDisItemReferNew.Rows[i]["ITEM"]);
                            ParameterList2.Add(dtDisItemReferNew.Rows[i]["PERIOD"]);
                            ParameterList2.Add(dtAvailableChan.Rows[k]["CHAN_NO"]);
                            ParameterList2.Add(dtDisItemReferNew.Rows[i]["RITEM"]);
                            ParameterList2.Add(dtDisItemReferNew.Rows[i]["RPERIOD"]);
                            ParameterList2.Add(dtDisItemReferNew.Rows[i]["REFER_RATE"]);
                            ParameterList2.Add(dtDisItemReferNew.Rows[i]["CREATEDATE"]);
                            ParameterList2.Add(dtDisItemReferNew.Rows[i]["CREATEUID"]);

                            bResult = BCODisChanRefer.CreateDisChanRefer(ParameterList2, DBT);
                        }
                    }
                    #endregion
                }

                //  處理更新:dtUpdate
                if (dtDisItemReferDiff != null && dtDisItemReferDiff.Rows.Count > 0)
                {
                    #region
                    foreach (DataRow dr in dtDisItemReferDiff.Rows)
                    {
                        //1.逐筆更新商品參照檔資訊
                        ParameterList.Clear();

                        //old
                        ParameterList.Add(dr["DIS_NO"]);
                        ParameterList.Add(dr["ITEM"]);
                        ParameterList.Add(dr["PERIOD"]);
                        ParameterList.Add(dr["RITEM"]);
                        ParameterList.Add(dr["RPERIOD"]);
                        //new
                        ParameterList.Add(dr["DIS_NO"]);
                        ParameterList.Add(dr["ITEM"]);
                        ParameterList.Add(dr["PERIOD"]);
                        ParameterList.Add(dr["RITEM"]);
                        ParameterList.Add(dr["RPERIOD"]);
                        ParameterList.Add(dr["REFER_RATE"]);
                        ParameterList.Add(dr["UPDATEDATE"]);
                        ParameterList.Add(dr["UPDATEUID"]);

                        bResult = UpdateDisItemReferFor111_2(ParameterList, DBT);

                        if (dtDisChanNew == null || dtDisChanNew.Rows.Count <= 0)
                        {
                            MaintainDisRecord BCODisRecord = new MaintainDisRecord(ConnectionDB);
                            ParameterList.Clear();
                            ParameterList.Add(vItem);
                            ParameterList.Add(vPeriod);
                            dtAvailableChan = BCODisRecord.QueryForSelectDisChan(ParameterList);
                        }
                        else
                        {
                            dtAvailableChan = dtDisChanNew;
                        }

                        for (Int32 k = 0; k <= dtAvailableChan.Rows.Count - 1; k++)
                        {
                            //2.更新品項通路參照資訊
                            ParameterList2.Clear();
                            //old                            
                            ParameterList2.Add(dr["DIS_NO"]);
                            ParameterList2.Add(dr["ITEM"]);
                            ParameterList2.Add(dr["PERIOD"]);
                            ParameterList2.Add(dtAvailableChan.Rows[k]["CHAN_NO"]);
                            ParameterList2.Add(dr["RITEM"]);
                            ParameterList2.Add(dr["RPERIOD"]);
                            //new
                            ParameterList2.Add(dr["DIS_NO"]);
                            ParameterList2.Add(dr["ITEM"]);
                            ParameterList2.Add(dr["PERIOD"]);
                            ParameterList2.Add(dtAvailableChan.Rows[k]["CHAN_NO"]);
                            ParameterList2.Add(dr["RITEM"]);
                            ParameterList2.Add(dr["RPERIOD"]);
                            ParameterList2.Add(dr["REFER_RATE"]);
                            ParameterList2.Add(dr["UPDATEDATE"]);
                            ParameterList2.Add(dr["UPDATEUID"]);
                            bResult = BCODisChanRefer.UpdateDisChanRefer2(ParameterList2, DBT);
                        }

                    }
                    #endregion
                }


                #region 交易成功

                if (IsRootTranscation)
                {
                    //獨立呼叫Transcation成立
                    DBT.Commit();
                }

                bResult = true;
                #endregion
            }
            catch (Exception ex)
            {
                #region 交易失敗

                bResult = false;

                if (IsRootTranscation)
                {
                    //獨立呼叫Transcation失敗
                    DBT.Rollback();
                }

                #endregion

                throw GetNewException(ex);
            }
            finally
            {
                #region 判斷是否關閉交易連線

                if (IsRootTranscation)
                {
                    //獨立呼叫Transcation,關閉連線
                    if (Conn.State == ConnectionState.Connecting)
                    {
                        Conn.Close();
                    }
                }

                #endregion

            }

            return bResult;
        }
        public bool CreateItemAndChanRefer(DataTable dtDisItemRefer, DataTable dtDisChan, string vDisNo, string vItem, string vPeriod, DbTransaction RootDBT)
        {
            #region
            bool bResult = false;
            bool IsRootTranscation = false;

            try
            {
                //判斷是否有傳入Root Transcation 
                IsRootTranscation = (RootDBT == null) ? true : false;


                #region 啟動交易或指定RootTranscation

                if (IsRootTranscation)
                {
                    //獨立呼叫啟動Transcation
                    Conn = USEDB.CreateConnection();
                    Conn.Open();
                    DBT = Conn.BeginTransaction();
                    System.Web.HttpContext.Current.Trace.Warn(string.Format("使用者:{0} 於{1}.CreateItemAndChanRefer.Open Connetction:{2} ",
                                                                     System.Web.HttpContext.Current.Session["UID"].ToString(),
                                                                      DateTime.Now.ToString(),
                                                                      DBT.GetHashCode().ToString())
                                                              );

                }
                else
                {
                    DBT = RootDBT;
                    System.Web.HttpContext.Current.Trace.Warn(string.Format("使用者:{0} 於{1}.CreateItemAndChanRefer.Used Old Connetction:{2} ",
                                                                     System.Web.HttpContext.Current.Session["UID"].ToString(),
                                                                      DateTime.Now.ToString(),
                                                                      DBT.GetHashCode().ToString())
                                                              );

                }

                #endregion

                DataTable dtAvailableChan = null;
                ArrayList ParameterList = new ArrayList();
                ArrayList ParameterList2 = new ArrayList();


                //4.1) 檢查目前配本通路暫存檔是否有值,無值則選擇所有可配通路 
                if (dtDisChan == null || dtDisChan.Rows.Count <= 0)
                {
                    MaintainDisRecord BCODisRecord = new MaintainDisRecord(ConnectionDB);
                    ParameterList.Clear();
                    ParameterList.Add(vItem);
                    ParameterList.Add(vPeriod);
                    dtAvailableChan = BCODisRecord.QueryForSelectDisChan(ParameterList);
                }
                else
                {
                    dtAvailableChan = dtDisChan;
                }

                //4.2) 處理新增

                if (dtDisItemRefer != null && dtDisItemRefer.Rows.Count > 0)
                {
                    MaintainDisChanRefer BCODisChanRefer = new MaintainDisChanRefer(ConnectionDB);


                    for (Int32 i = 0; i <= dtDisItemRefer.Rows.Count - 1; i++)
                    {
                        //1.逐筆建立商品參照檔資訊
                        ParameterList.Clear();
                        ParameterList.Add(vDisNo);
                        ParameterList.Add(vItem);
                        ParameterList.Add(vPeriod);
                        ParameterList.Add(dtDisItemRefer.Rows[i]["RITEM"]);
                        ParameterList.Add(dtDisItemRefer.Rows[i]["RPERIOD"]);
                        ParameterList.Add(dtDisItemRefer.Rows[i]["REFER_RATE"]);
                        ParameterList.Add(dtDisItemRefer.Rows[i]["CREATEDATE"]);
                        ParameterList.Add(dtDisItemRefer.Rows[i]["CREATEUID"]);

                        bResult = CreateDisItemReferFor111(ParameterList, DBT);

                        //2.建立品項通路參照資訊

                        for (Int32 k = 0; k <= dtAvailableChan.Rows.Count - 1; k++)
                        {

                            ParameterList2.Clear();
                            ParameterList2.Add(vDisNo);
                            ParameterList2.Add(vItem);
                            ParameterList2.Add(vPeriod);
                            ParameterList2.Add(dtAvailableChan.Rows[k]["CHAN_NO"]);
                            ParameterList2.Add(dtDisItemRefer.Rows[i]["RITEM"]);
                            ParameterList2.Add(dtDisItemRefer.Rows[i]["RPERIOD"]);
                            ParameterList2.Add(dtDisItemRefer.Rows[i]["REFER_RATE"]);
                            ParameterList2.Add(dtDisItemRefer.Rows[i]["CREATEDATE"]);
                            ParameterList2.Add(dtDisItemRefer.Rows[i]["CREATEUID"]);

                            bResult = BCODisChanRefer.CreateDisChanRefer(ParameterList2, DBT);
                        }
                    }
                }

                #region 交易成功

                if (IsRootTranscation)
                {
                    //獨立呼叫Transcation成立
                    DBT.Commit();
                }

                #endregion
            }
            catch (Exception ex)
            {
                #region 交易失敗

                bResult = false;

                if (IsRootTranscation)
                {
                    //獨立呼叫Transcation失敗
                    DBT.Rollback();
                }

                #endregion

                throw GetNewException(ex);
            }
            finally
            {
                #region 判斷是否關閉交易連線

                if (IsRootTranscation)
                {
                    //獨立呼叫Transcation,關閉連線
                    if (Conn.State == ConnectionState.Connecting)
                    {
                        Conn.Close();
                    }
                }

                #endregion

            }

            return bResult;
            #endregion
        }