public void UpdateGiftProfile_2(string UserID, string UpdateDate, int accept_days, int out_days, ArrayList ParameterList, DbTransaction RootDBT)
        {
            DBO.MaintainAcceptDBO dbo = new DBO.MaintainAcceptDBO(ref USEDB);

            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

                ArrayList SQLParameters = new ArrayList();
                SQLParameters.Clear();
                SQLParameters.Add(UserID); //0 string
                SQLParameters.Add(UpdateDate); //1 string
                SQLParameters.Add(ParameterList[0]); //2 string
                SQLParameters.Add(ParameterList[1]); //3 string 
                SQLParameters.Add(ParameterList[2]); //4 string 
                SQLParameters.Add(ParameterList[3]); //5 int 一包裝數
                SQLParameters.Add(ParameterList[4]); //6 double 3-10 共八個都是 double (SIZE)
                SQLParameters.Add(ParameterList[5]); //7 double
                SQLParameters.Add(ParameterList[6]); //8 double
                SQLParameters.Add(ParameterList[7]); //9 double 
                SQLParameters.Add(ParameterList[8]); //10 double
                SQLParameters.Add(ParameterList[9]); //11 double
                SQLParameters.Add(ParameterList[10]); //12 double
                SQLParameters.Add(ParameterList[11]); //13 double
                SQLParameters.Add(ParameterList[12]); //14 string
                SQLParameters.Add(ParameterList[13]); //15 int
                SQLParameters.Add(accept_days); //16 int
                SQLParameters.Add(out_days); //17 int

                dbo.UpdateMktGiftProfile_2(SQLParameters, DBT);

            }
            catch (Exception ex)
            {
                #region 交易失敗
                if (IsRootTranscation)
                {
                    //獨立呼叫Transcation失敗
                    DBT.Rollback();
                }
                #endregion

                throw ex;
            }
        }
        public bool UpdateAccept_2(ArrayList ParameterList, DataTable dtDetls, DataTable dtGifts, DbTransaction RootDBT, out string Statue, out string ErrorItem, out string ErrMsg)
        {
            bool IsRootTranscation = false;

            ErrorItem = string.Empty;
            Statue = string.Empty;
            ErrMsg = string.Empty;

            int ID = -1;
            int PID = -1;
            string Result = "";

            try
            {
                string UserID = ParameterList[0].ToString();
                string UpdateDate = ParameterList[1].ToString();
                string AcceptNo = ParameterList[2].ToString();
                string AcceptDate = ParameterList[3].ToString();
                string PurchaseNo = ParameterList[4].ToString();
                string WaybillNo = ParameterList[5].ToString();
                string InvoiceNo = ParameterList[6].ToString();
                string TaxAmt = ParameterList[7].ToString();
                string UtaxAmt = ParameterList[8].ToString();
                string Tax = ParameterList[9].ToString();

                DBO.MaintainAcceptDBO VGIDBO = new DBO.MaintainAcceptDBO(ref USEDB);
                DBO.MaintainAcceptQualityCheck VGIQC = new DBO.MaintainAcceptQualityCheck(strConn);
                PURDBO.MaintainGoodsInTransit PURDB = new PURDBO.MaintainGoodsInTransit(strConn);
                IVMDBO.MaintainStockInOut IVMDB = new IVMDBO.MaintainStockInOut(strConn);

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

                #region 啟動交易或指定RootTranscation

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

                #endregion

                ArrayList InsertParameter = new ArrayList();

                #region 商品明細
                //barcode
                //item
                //period
                //purchase_Qty
                //In_Date
                //TAcc_Qty
                //Acc_Qty
                //Cost
                //Price
                //Package_Unit
                //S_Weight
                //S_Length
                //S_Width
                //S_Height
                //P_Weight
                //P_Length
                //P_Width
                //P_Height
                //Product_Source
                //Produce_Date
                //Reserved_Period
                //Valid_Date
                //AllowAccept_Date
                //Old_Qty
                //RowState

                for (int i = 0; i < dtDetls.Rows.Count; i++)
                {
                    int DetlID = -1;

                    string Barcode = dtDetls.Rows[i]["barcode"].ToString();
                    string Item = dtDetls.Rows[i]["item"].ToString();
                    string Period = dtDetls.Rows[i]["period"].ToString();
                    string In_Date = dtDetls.Rows[i]["In_Date"].ToString();
                    string PurchaseQty = dtDetls.Rows[i]["purchase_Qty"].ToString();
                    string TotalAcceptQty = dtDetls.Rows[i]["TAcc_Qty"].ToString();
                    string AcceptQty = dtDetls.Rows[i]["Acc_Qty"].ToString();
                    string OLDQty = dtDetls.Rows[i]["Old_Qty"].ToString();
                    string DFlag = dtDetls.Rows[i]["RowState"].ToString();

                    int accept_days = -1;
                    int out_days = -1;

                    //寫入明細檔資料,逐筆寫入
                    InsertParameter.Clear();
                    InsertParameter.Add(UserID);
                    InsertParameter.Add(UpdateDate);
                    InsertParameter.Add(AcceptNo);
                    InsertParameter.Add(Barcode); //BarCode
                    InsertParameter.Add(Item); //Item
                    InsertParameter.Add(Period); //Period
                    InsertParameter.Add(AcceptQty); //NewQty
                    InsertParameter.Add(dtDetls.Rows[i]["Cost"].ToString());            //Cost
                    InsertParameter.Add(dtDetls.Rows[i]["Price"].ToString());           //Price
                    InsertParameter.Add(dtDetls.Rows[i]["Package_Unit"].ToString());    //Package_Unit
                    InsertParameter.Add(dtDetls.Rows[i]["S_Weight"].ToString());        //S_Weight
                    InsertParameter.Add(dtDetls.Rows[i]["S_Length"].ToString());        //S_Length
                    InsertParameter.Add(dtDetls.Rows[i]["S_Width"].ToString());         //S_Width
                    InsertParameter.Add(dtDetls.Rows[i]["S_Height"].ToString());        //S_Height
                    InsertParameter.Add(dtDetls.Rows[i]["P_Weight"].ToString());        //P_Weight
                    InsertParameter.Add(dtDetls.Rows[i]["P_Length"].ToString());        //P_Length
                    InsertParameter.Add(dtDetls.Rows[i]["P_Width"].ToString());         //P_Width
                    InsertParameter.Add(dtDetls.Rows[i]["P_Height"].ToString());        //P_Height
                    InsertParameter.Add(dtDetls.Rows[i]["Product_Source"].ToString());  //Product_Source
                    InsertParameter.Add(dtDetls.Rows[i]["Produce_Date"].ToString());    //Produce_Date
                    InsertParameter.Add(dtDetls.Rows[i]["Reserved_Period"].ToString()); //Reserved_Period
                    InsertParameter.Add(dtDetls.Rows[i]["Valid_Date"].ToString());      //Valid_Date
                    InsertParameter.Add(dtDetls.Rows[i]["AllowAccept_Date"].ToString());//AllowAccept_Date
                    InsertParameter.Add(DFlag); //23.FLAG 
                    InsertParameter.Add(dtDetls.Rows[i]["UPDATEDATE"]);                 //OLD UPDATEDATE
                    InsertParameter.Add(dtDetls.Rows[i]["UPDATEUID"]);                  //OLD UPDATEUID

                    VGIDBO.UpdateAcceptDetl_2(InsertParameter, DBT, out DetlID);

                    //依傳入的明細資料集參數,將正常品資料回寫生效中(enable=1)的商品屬性檔(VDS_ITM_PERIOD_PROFILE)的下列欄位
                    InsertParameter.Clear();
                    InsertParameter.Add(Item);
                    InsertParameter.Add(Period);
                    InsertParameter.Add(dtDetls.Rows[i]["Package_Unit"].ToString());    //Package_Unit
                    InsertParameter.Add(dtDetls.Rows[i]["S_Weight"].ToString());        //S_Weight
                    InsertParameter.Add(dtDetls.Rows[i]["S_Length"].ToString());        //S_Length
                    InsertParameter.Add(dtDetls.Rows[i]["S_Width"].ToString());         //S_Width
                    InsertParameter.Add(dtDetls.Rows[i]["S_Height"].ToString());        //S_Height
                    InsertParameter.Add(dtDetls.Rows[i]["P_Weight"].ToString());        //P_Weight
                    InsertParameter.Add(dtDetls.Rows[i]["P_Length"].ToString());        //P_Length
                    InsertParameter.Add(dtDetls.Rows[i]["P_Width"].ToString());         //P_Width
                    InsertParameter.Add(dtDetls.Rows[i]["P_Height"].ToString());        //P_Height
                    InsertParameter.Add(AcceptDate);
                    InsertParameter.Add(AcceptQty); //NewQty
                    InsertParameter.Add(dtDetls.Rows[i]["Valid_Date"].ToString());      //Valid_Date
                    InsertParameter.Add(dtDetls.Rows[i]["AllowAccept_Date"].ToString());//AllowAccept_Date
                    //23.FLAG 
                    //24 OldQty
                    UpdateItmPeriodProfile_2(UserID, UpdateDate, InsertParameter, DBT, out accept_days, out out_days);

                    #region 贈品明細

                    //Barcode           商品條碼        
                    //Item              品號               
                    //Period            期別             
                    //Virtual_Code      虛擬品號   
                    //purchase_Qty      採購數量   
                    //GiftName                  
                    //Accept_Qty        驗收數量     
                    //accept_accqty     總驗收數   
                    //Old_Qty           驗收數量(原始)
                    //SQty              剩餘數量           
                    //Package_Unit      1包裝數    
                    //S_Weight          單品重量       
                    //S_Length          單品長度       
                    //S_Width           單品寬度        
                    //S_Height          單品高度       
                    //P_Weight          包裝重量       
                    //P_Length          包裝長度       
                    //P_Width           包裝寬度        
                    //P_Height          包裝高度       
                    //UPDATEUID                 
                    //UPDATEDATE                
                    //RowState          "U";               

                    if (DFlag == "U")
                    {
                        //更新贈品明細
                        for (int x = 0; x < dtGifts.Rows.Count; x++)
                        {
                            string GiftBarcode = dtGifts.Rows[x]["Barcode"].ToString();
                            string GiftItem = dtGifts.Rows[x]["Item"].ToString();
                            string GiftPeriod = dtGifts.Rows[x]["Period"].ToString();
                            string GiftVirtualCode = dtGifts.Rows[x]["Virtual_Code"].ToString();
                            string GFlag = dtGifts.Rows[x]["RowState"].ToString();
                            string GiftTotalAcceptQty = dtGifts.Rows[x]["accept_accqty"].ToString();
                            string GiftAcceptQty = dtGifts.Rows[x]["Accept_Qty"].ToString();
                            string GiftAcceptQty_Old = dtGifts.Rows[x]["Old_Qty"].ToString();
                            string GiftPurchaseQty = dtGifts.Rows[x]["purchase_Qty"].ToString();

                            if (Barcode == GiftBarcode && Item == GiftItem && Period == GiftPeriod)
                            {
                                InsertParameter.Clear();
                                InsertParameter.Add(UserID);                                    //0
                                InsertParameter.Add(UpdateDate);                                //1
                                InsertParameter.Add(DetlID);                                    //2
                                InsertParameter.Add(dtGifts.Rows[x]["Barcode"].ToString());     //3  Barcode
                                InsertParameter.Add(GiftItem);                                  //4  Item
                                InsertParameter.Add(GiftPeriod);                                //5  Period
                                InsertParameter.Add(GiftVirtualCode);                           //6  VirtualCode
                                InsertParameter.Add(AcceptNo);                                  //7
                                InsertParameter.Add(dtGifts.Rows[x]["purchase_Qty"].ToString());//8  PurchaseQty
                                InsertParameter.Add(dtGifts.Rows[x]["Accept_Qty"].ToString());  //9  AcceptQty
                                InsertParameter.Add(dtGifts.Rows[x]["Package_Unit"].ToString());//10 PackageUnit
                                InsertParameter.Add(dtGifts.Rows[x]["S_Weight"].ToString());    //11 SWeight
                                InsertParameter.Add(dtGifts.Rows[x]["S_Length"].ToString());    //12 SLength
                                InsertParameter.Add(dtGifts.Rows[x]["S_Width"].ToString());     //13 SWidth
                                InsertParameter.Add(dtGifts.Rows[x]["S_Height"].ToString());    //14 SHeigh
                                InsertParameter.Add(dtGifts.Rows[x]["P_Weight"].ToString());    //15 PWeight
                                InsertParameter.Add(dtGifts.Rows[x]["P_Length"].ToString());    //16 PLength
                                InsertParameter.Add(dtGifts.Rows[x]["P_Width"].ToString());     //17 PWidth
                                InsertParameter.Add(dtGifts.Rows[x]["P_Height"].ToString());    //18 PHeigh
                                InsertParameter.Add(dtGifts.Rows[x]["RowState"].ToString());    //19 RowState
                                InsertParameter.Add(dtGifts.Rows[x]["UPDATEDATE"]);             //20 OLD UPDATEDATE
                                InsertParameter.Add(dtGifts.Rows[x]["UPDATEUID"]);              //21 OLD UPDATEUID

                                VGIDBO.UpdateAcceptGift_2(InsertParameter, DBT);

                                if (GFlag == "U")
                                {
                                    //依傳入的贈品明細資料集參數,將贈品資料回寫贈品屬性檔(VDS_MKT_GIFT_PROFILE)的下列欄位
                                    InsertParameter.Clear();
                                    InsertParameter.Add(UserID);                                    //0
                                    InsertParameter.Add(UpdateDate);                                //1
                                    InsertParameter.Add(GiftItem);                                  //2  Item
                                    InsertParameter.Add(GiftPeriod);                                //3  Period
                                    InsertParameter.Add(GiftVirtualCode);                           //4  VirtualCode
                                    InsertParameter.Add(dtGifts.Rows[x]["Package_Unit"].ToString());//5  PackageUnit
                                    InsertParameter.Add(dtGifts.Rows[x]["S_Weight"].ToString());    //6  SWeight
                                    InsertParameter.Add(dtGifts.Rows[x]["S_Length"].ToString());    //7  SLength
                                    InsertParameter.Add(dtGifts.Rows[x]["S_Width"].ToString());     //8  SWidth
                                    InsertParameter.Add(dtGifts.Rows[x]["S_Height"].ToString());    //9  SHeigh
                                    InsertParameter.Add(dtGifts.Rows[x]["P_Weight"].ToString());    //10 PWeight
                                    InsertParameter.Add(dtGifts.Rows[x]["P_Length"].ToString());    //11 PLength
                                    InsertParameter.Add(dtGifts.Rows[x]["P_Width"].ToString());     //12 PWidth
                                    InsertParameter.Add(dtGifts.Rows[x]["P_Height"].ToString());    //13 PHeigh
                                    InsertParameter.Add(AcceptDate);                                //14
                                    InsertParameter.Add(dtGifts.Rows[x]["Accept_Qty"].ToString());  //15 accept_qty
                                    InsertParameter.Add(accept_days);                               //16
                                    InsertParameter.Add(out_days);                                  //17

                                    DBO.MaintainAcceptDBO dbo = new DBO.MaintainAcceptDBO(ref USEDB);
                                    dbo.UpdateMktGiftProfile_2(InsertParameter, DBT);
                                }
                            }
                        }
                    }

                    #endregion
                }

                #endregion

                #region 交易成功

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

                #endregion

                return true;

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

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

                #endregion

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

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

                #endregion
            }
        }