/// <summary>
 /// 目的:查詢上傳後的成功筆數
 /// Table:VDS_VDM_VCMS_ITEM_TMP
 /// 條件:V_CREATEUID
 /// </summary>
 public void QueryVcmsItemTmpImportStat(string V_CREATEUID, out int N_TMP_CNT, out int N_TAB_CNT)
 {
     try
     {
         DBO.VDM_VDM051_DBO dbo = new VDM_VDM051_DBO(ref USEDB);
         dbo.doQueryVcmsItemTmpImportStat(V_CREATEUID, out N_TMP_CNT, out N_TAB_CNT);
     }
     catch (Exception ex)
     {
         throw ex;
     }
 }
		/// <summary>
		/// 目的:查詢錯誤訊息資料
		/// Table:VDS_VDM_VCMS_ITEM_TMP
		/// 條件:[資料型態]=2:錯誤資料、[建立人員]=
		/// </summary>
        public DataTable QueryErrorByFind(string V_CREATEUID, DateTime D_CREATEDATE_S, DateTime D_CREATEDATE_E, Int32 N_ROWNUM)
        {
            try
            {
                DBO.VDM_VDM051_DBO dbo = new VDM_VDM051_DBO(ref USEDB);
                return dbo.doQueryVcmsItemTmpError(V_CREATEUID, D_CREATEDATE_S, D_CREATEDATE_E, N_ROWNUM);
            }
            catch (Exception ex)
            {
                throw ex;
            }
		}
		/// <summary>
		/// 目的:將上傳檔案內容,存入暫存檔
		/// 
		/// 1.先清除前一次,同一使用者執行的匯入暫存資訊與錯誤資訊。
		///    相關Table:VDS_VDM_VCMS_ITEM_TMP(VCMS廠商收費明細暫存檔)
		/// 2.讀取匯入檔案到暫存DataSet。
		/// 3.檢查匯入檔案格式內容是否正確,如有任何錯誤,則停止上傳流程,並回傳錯誤訊息。
		///   『XX檔案,檔案內容錯誤:@錯誤說明』 (格式請參考資料庫Table Shcema)
		///       * 日期:檢查日期格式。
		///       * 數字:檢查內容是否為數字。
		///       * 文字:檢查長度是否溢位。
		///       * 檔案欄位數是否不足。
		///       * 兩個工作表匯入內容有任一筆錯,皆視為錯誤,整批放棄。
		///       * 匯入表格細節說明請參考:WEB UI SPEC 文件
		/// 4. 格式檢查正確無誤後
		///    a) 暫存檔中的[狀態]欄位調整為1:FILE TO TMP
		///    b) 呼叫 [CheckData] ,檢查資料內容邏輯正確性
		/// 5. 無論CheckData()檢查結果是否為True,
		///    皆將上傳檔案內容新增到資料庫Tmp Table:,
		///    並記錄錯誤原因、匯入者、匯入日期、處理檔案名稱=上傳檔名。
		///    c)上述匯入需一併Commit,處理期間有任何錯誤,皆視為異常,整批Rollback,並回傳錯誤訊息。
		/// 6. 上傳流程完成,回傳處理筆數訊息:上傳總筆數、成功筆數、失敗筆數。
		/// </summary>
        public string FileToTmp(DataTable dt, DbTransaction RootDBT, string V_DATA_SOURCE, string V_CREATEUID)
        {
            bool IsRootTranscation = false;

            try
            {
                DBO.VDM_VDM051_DBO dbo = new VDM_VDM051_DBO(ref USEDB);

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


                #region 啟動交易或指定RootTranscation

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

                #endregion

                #region 清空VDS_VDM_VCMS_ITEM_TMP

                dbo.doDeleteVcmsItemTmp(V_CREATEUID, DBT);

                #endregion

                #region FileToTmp
                ArrayList ParameterList = new ArrayList();
                string V_RESULT = "1";
                string V_MSG = "";

                if (dt != null)
                {
                    for (int i = 0; i < dt.Rows.Count; i++)
                    {
                        if (V_RESULT == "1")
                        {
                            ParameterList.Clear();
                            ParameterList.Add(V_DATA_SOURCE);
                            ParameterList.Add(dt.Rows[i][0].ToString());
                            ParameterList.Add(V_CREATEUID);
                            ParameterList.Add(System.DateTime.Now);
                            dbo.doCreateVcmsItemTmp(ParameterList, DBT, out V_RESULT ,out V_MSG);
                            V_MSG += "(" + dt.Rows[i][0].ToString() + ")";
                        }
                        else
                        {
                            break;
                        }
                    }
                }
                #endregion

                

                if (V_RESULT == "1")
                {
                    #region TmpToDB

                    dbo.doCreateVcmsItem(V_CREATEUID, DBT);

                    #endregion

                    if (IsRootTranscation)
                    {
                        //獨立呼叫Transcation成立
                        DBT.Commit();
                        V_MSG = "";
                    }
                }
                else
                {
                    DBT.Rollback();
                }
                return V_MSG;



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

                DBT.Rollback();
                #endregion

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

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

                #endregion

            }
        }