using iMESCore.Settings;
using Microsoft.VisualBasic;
using Microsoft.VisualBasic.CompilerServices;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static iMESCore.Base.iMESComSubroutine;
using static iMESCore.Base.iMESComXML;
using static iMESCore.Base.iMESConst;
using static iMESCore.DataBase.iMESSql;
namespace MEStc_SXS
{
   public class clsTest_14278 : IDisposable
    {
        /*不使用modXX,不再使用OleDb
         * 資料庫相關(建立連線/讀取資料/異動資料),使用data_access_service.dll
         * 設定檔相關,使用iMESAppSetting
         * Xml相關,使用iMESComXML.dll
         * 常數相關,使用iMESConst.dll
         * 簡易副程式,使用iMESComSubroutine.dll
        */


        private AppSettings objSetting = new AppSettings();
        private string strConnectionString;       // Connection string
        private string strDataBaseType;           // DataBase Type:oracle, mysql, access
        private string strMQType;                 // MessageQueue Type:TIBCO, MQSeries, MSMQ
        private bool disposed = false;        // To detect redundant calls
        private string strSQL = "";
        private string strSQLAddField;
        private string strSQLAddValue;
 
        #region --- Initial Object ---

        public clsTest_14278()
        {
            // Get database type
            strDataBaseType = objSetting.GetDataBaseType();
            // Get connection string    
            strConnectionString = objSetting.GetConnectionString(strDataBaseType);
            // Get Message Queue Type
            strMQType = objSetting.GetMQType();
        }

        #endregion

        #region --- Property ---

        // //Property--------------------------------------------------------------------------------------------------------------------------------
        public string ConnectionString
        {
            get
            {
                return strConnectionString;
            }
        }

        public string DataBaseType
        {
            get
            {
                return strDataBaseType;
            }
        }

        public string MQType
        {
            get
            {
                return strMQType;
            }
        }

        // 2003/03/22,sammi.
        // 因TC可能呼叫KC,在整個Function中,必須要使用同一個Reverse物件,如此在產生AddReverseUpdateContent的資料時,ReverseOrder才不會重覆.
        // 若KC再往下呼叫UD,則必須將Reverse物件傳遞予UD.
        //public object ReverseObj
        //{
        //    get
        //    {
        //        //return objReverse;
        //        // ReverseObj = objReverse
        //    }
        //}


        #endregion

        #region IDisposable Support
        private bool disposedValue; // 偵測多餘的呼叫

        // IDisposable
        protected virtual void Dispose(bool disposing)
        {
            if (!disposedValue)
            {
                if (disposing)
                {
                    // TODO: 處置 Managed 狀態 (Managed 物件)。
                }

                // TODO: 釋放 Unmanaged 資源 (Unmanaged 物件) 並覆寫下面的 Finalize()。
                // TODO: 將大型欄位設定為 null。
            }
            disposedValue = true;
        }

        // TODO: 只有當上面的 Dispose(ByVal disposing As Boolean) 有可釋放 Unmanaged 資源的程式碼時，才覆寫 Finalize()。
        // Protected Overrides Sub Finalize()
        // ' 請勿變更此程式碼。在上面的 Dispose(ByVal disposing As Boolean) 中輸入清除程式碼。
        // Dispose(False)
        // MyBase.Finalize()
        // End Sub

        // 由 Visual Basic 新增此程式碼以正確實作可處置的模式。
        public void Dispose()
        {
            // 請勿變更此程式碼。在以上的 Dispose 置入清除程式碼 (ByVal 視為布林值處置)。
            Dispose(true);
            GC.SuppressFinalize(this);
        }
        #endregion

        #region --- Subcontractor 外包商 ---


        public string AddSubcontractor(string SubcontractorNo, string SubcontractorName, string Description = defString, string Creator = defString, DateTime CreateDate = default(DateTime), string AdditionalXml = "")
        {
            string AddSubcontractorRet = default(string);
            // 此 Function 將新增一筆資料
            // 傳入值: 各欄位新增值
            // 傳回值: success(成功), fail(失敗)

            if (CreateDate == defDateTime)
                CreateDate = DateTime.Now;

            try
            {
                strSQLAddField = "Insert into tblENTSubcontractor (SubcontractorNo, SubcontractorName, IssueState";
                strSQLAddValue = " Values ('" + SubcontractorNo + "','" + SubcontractorName + "', 0";

                if ((Description ?? "") != defString)
                {
                    strSQLAddField += ",Description";
                    strSQLAddValue += ",'" + Description + "'";
                }
                if ((Creator ?? "") != defString)
                {
                    strSQLAddField += ",Creator";
                    strSQLAddValue += ",'" + Creator + "'";
                }
                if (CreateDate != defDateTime)
                {
                    strSQLAddField += ",CreateDate";
                    strSQLAddValue += ", To_Date('" + Strings.Format(Conversions.ToDate(CreateDate), "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS')";
                }

                if (string.IsNullOrEmpty(AdditionalXml))
                {
                    // 當沒有額外的欄位時,直接給定strSQL
                    strSQL = strSQLAddField + ")" + strSQLAddValue + ")";
                }

                else
                {
                    // 加上additional的field & value 後傳回
                    strSQL = SeparateAddXML_Add(ref strSQLAddField, ref strSQLAddValue, AdditionalXml);

                }

                // //執行SQL指令
                ExecuteSQLNoneQuery(Conversions.ToString(DataBaseType), strConnectionString, ref strSQL);
               
                // //Return success
                AddSubcontractorRet = "success";
            }

            catch (Exception e1)
            {
                AddSubcontractorRet = "fail";
                // 發生錯誤時丟回本身的Function Name及系統錯誤訊息
                throw;

            } // New Exception("kcENT.AddSubcontractor: " & e1.Message)

            return AddSubcontractorRet;

        }

        public string EditSubcontractor(string SubcontractorNo, string SubcontractorName = defString, string Description = defString, string AdditionalXml = "", int DataStamp = defInteger, string Reviser = defString, DateTime ReviseDate = default(DateTime))
        {
            string EditSubcontractorRet = default(string);
            // 此 Function 將修改一筆資料
            // 傳入值: 各欄位修改值
            // 傳回值: success(成功), fail(失敗)

            try
            {
                // 先給定strSQL一定有的欄位
                strSQL = "Update tblENTSubcontractor Set ";

                if ((SubcontractorName ?? "") != defString)
                {
                    strSQL += "SubcontractorName = '" + SubcontractorName + "',";
                }
                if ((Description ?? "") != defString)
                {
                    strSQL += "Description = '" + Description + "',";
                }

                if (Reviser != defString)
                    strSQL = strSQL + "Reviser = '" + Reviser + "',";

                if (ReviseDate != defDateTime)
                    strSQL = strSQL + "ReviseDate = To_Date('" + Strings.Format(ReviseDate, "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS'),";

                if (DataStamp != defInteger)
                    strSQL = strSQL + "DataStamp = DataStamp + 1 ,";

                // 有額外的欄位時再Append進原來的strSQL中
                if (!string.IsNullOrEmpty(AdditionalXml))
                {
                    // 加上additional的field & value
                    strSQL += SeparateAddXML_Edit(AdditionalXml);
                }

                // 去除strSQL中最後一個 ","
                if (Strings.InStr(1, strSQL, ",") != 0)   // 表示有要修改的欄位
                {
                    if (Strings.Right(strSQL, 1) == ",")
                    {
                        strSQL = Strings.Mid(strSQL, 1, Strings.Len(strSQL) - 1);
                    }

                    strSQL += " Where SubcontractorNo ='" + SubcontractorNo + "'";
                    strSQL = strSQL + " And DataStamp = '" + DataStamp + "'";

                    // 有額外的條件式時再Append進原來的strSQL中
                    if (!string.IsNullOrEmpty(AdditionalXml))
                    {
                        // 加上additional的condition
                        strSQL += SeparateAddXML_Condition(AdditionalXml);
                    }

                    // 呼叫執行SQL指令
                    ExecuteSQLNoneQuery(Conversions.ToString(DataBaseType), strConnectionString, ref strSQL, 1, true);
                }

                // //Return success
                EditSubcontractorRet = "success";
            }

            catch (Exception e1)
            {
                EditSubcontractorRet = "fail";
                // 發生錯誤時丟回本身的Function Name及系統錯誤訊息
                throw;

            } // New Exception("kcENT.EditSubcontractor: " & e1.Message)

            return EditSubcontractorRet;

        }
        public string DelSubcontractor(string SubcontractorNo, string AdditionalXml = "")
        {
            string DelSubcontractorRet = default(string);
            // 此 Function 將刪除資料
            // 傳入值: 刪除的索引值
            // 傳回值: success(成功), fail(失敗)
            var CollectionSQL = new Collection();

            try
            {
                // 1. 刪除Contactor
                strSQL = "Delete From tblENTSubcontractorCont " + "Where SubcontractorNo='" + SubcontractorNo + "'";
                CollectionSQL.Add(strSQL);

                // 2. 刪除主檔
                strSQL = "Delete From tblENTSubcontractor " + " Where SubcontractorNo ='" + SubcontractorNo + "'";

                if (!string.IsNullOrEmpty(AdditionalXml))
                {
                    // 加上additional的condition
                    strSQL += SeparateAddXML_Condition(AdditionalXml);
                }

                CollectionSQL.Add(strSQL);

                // 呼叫執行SQL指令
                ExecuteSQLNoneQuery_UPD(Conversions.ToString(DataBaseType), strConnectionString, CollectionSQL);

                // //Return success
                DelSubcontractorRet = "success";
            }

            catch (Exception e1)
            {
                DelSubcontractorRet = "fail";
                // 發生錯誤時丟回本身的Function Name及系統錯誤訊息
                throw;

            } // New Exception("kcENT.DelSubcontractor: " & e1.Message)

            return DelSubcontractorRet;

        }

        public string LoadSubcontractor(string SubcontractorNo = defString, int IssueState = defInteger, string AdditionalXml = "")
        {
            string LoadSubcontractorRet = default(string);
            // 此 Function 將資料以XML方式取出
            // 傳入值: 索引值
            // 傳回值: XML(成功), fail(失敗)

            var dsENT = default(DataSet);
            IDbConnection cnnTemp = null;

            try
            {
                // //Create connection
                cnnTemp = CreateConnection(strConnectionString);

                strSQL = "Select * From tblENTSubcontractor Where SubcontractorNo Is Not Null";

                if ((SubcontractorNo ?? "") != defString)
                {
                    strSQL += " And SubcontractorNo = '" + SubcontractorNo + "'";
                }
                if (IssueState != defInteger)
                {
                    strSQL += " And IssueState = " + IssueState;
                }

                if (!string.IsNullOrEmpty(AdditionalXml))
                {
                    // 加上additional的condition
                    strSQL += SeparateAddXML_Condition(AdditionalXml);
                }

                // //Select data
                dsENT = new DataSet();
                ExecuteSQLQuery_Adapter(strSQL, dsENT, "tblENTSubcontractor", cnnTemp);

                // //Combine return value
                LoadSubcontractorRet = CombineXMLReturnValue("loadSubcontractor", "tblENTSubcontractor", "DataSet", FormatXMLSchema(dsENT.GetXmlSchema()), dsENT.GetXml(), "");
            }

            catch (Exception e1)
            {
                LoadSubcontractorRet = "fail";
                throw;
            } // New Exception("kcENT.LoadSubcontractor: " & e1.Message)

            finally
            {
                CloseConnection(cnnTemp);
                if (dsENT != null)
                {
                    dsENT.Dispose();
                }

            }

            return LoadSubcontractorRet;

        }

        public DataSet ShowSubcontractor(string SubcontractorNo = defString, int IssueState = defInteger, string AdditionalXml = "")
        {
            DataSet ShowSubcontractorRet = default(DataSet);
            // 此 Function 將資料以 Dataset 方式取出
            // 傳入值: 索引值
            // 傳回值: Dataset(成功), Nothing(失敗)

            var dsENT = default(DataSet);
            IDbConnection cnnTemp = null;

            try
            {
                // //Create connection
                cnnTemp = CreateConnection(strConnectionString);

                strSQL = "Select * From tblENTSubcontractor Where SubcontractorNo Is Not Null";

                if ((SubcontractorNo ?? "") != defString)
                {
                    strSQL += " And SubcontractorNo = '" + SubcontractorNo + "'";
                }
                if (IssueState != defInteger)
                {
                    strSQL += " And IssueState = " + IssueState;
                }

                if (!string.IsNullOrEmpty(AdditionalXml))
                {
                    // 加上additional的condition
                    strSQL += SeparateAddXML_Condition(AdditionalXml);
                }

                // //Select data
                dsENT = new DataSet();
                ExecuteSQLQuery_Adapter(strSQL, dsENT, "tblENTSubcontractor", cnnTemp);

                // //Return data
                ShowSubcontractorRet = dsENT;
            }

            catch (Exception e1)
            {
                ShowSubcontractorRet = null;
                throw;
            } // New Exception("kcENT.ShowSubcontractor: " & e1.Message)

            finally
            {
                CloseConnection(cnnTemp);
                if (dsENT != null)
                {
                    dsENT.Dispose();
                }

            }

            return ShowSubcontractorRet;

        }

        public DataRow GetSubcontractor(string SubcontractorNo = defString, int IssueState = defInteger, string AdditionalXml = "")
        {
            DataRow GetSubcontractorRet = default(DataRow);
            // 此 Function 將資料以 DataRow 方式取出
            // 傳入值: 索引值
            // 傳回值: DataRow(成功), Nothing(失敗)

            var dsENT = default(DataSet);
            IDbConnection cnnTemp = null;

            try
            {
                // //Create connection
                cnnTemp = CreateConnection(strConnectionString);

                strSQL = "Select * From tblENTSubcontractor Where SubcontractorNo Is Not Null";

                if ((SubcontractorNo ?? "") != defString)
                {
                    strSQL += " And SubcontractorNo = '" + SubcontractorNo + "'";
                }
                if (IssueState != defInteger)
                {
                    strSQL += " And IssueState = " + IssueState;
                }

                if (!string.IsNullOrEmpty(AdditionalXml))
                {
                    // 加上additional的condition
                    strSQL += SeparateAddXML_Condition(AdditionalXml);
                }

                // //Select data
                dsENT = new DataSet();
                ExecuteSQLQuery_Adapter(strSQL, dsENT, "tblENTSubcontractor", cnnTemp);

                // //Return data
                if (dsENT.Tables[0].Rows.Count > 0)
                {
                    GetSubcontractorRet = dsENT.Tables[0].Rows[0];
                }
                else
                {
                    GetSubcontractorRet = dsENT.Tables[0].NewRow();
                }
            }
            catch (Exception e1)
            {
                GetSubcontractorRet = null;
                throw;
            } // New Exception("kcENT.GetSubcontractor: " & e1.Message)

            finally
            {
                CloseConnection(cnnTemp);
                if (dsENT != null)
                {
                    dsENT.Dispose();
                }

            }

            return GetSubcontractorRet;

        }
        public string SetSubcontractorIssueState(string SubcontractorNo, int IssueState, int DataStamp = defInteger, string Reviser = defString, DateTime ReviseDate = default(DateTime))
        {
            string SetSubcontractorIssueStateRet = default(string);
            // 此 Function 將修改IssueState欄位的值
            // 傳入值: IssueState修改後的值及VendorNo
            // 傳回值: success(成功), fail(失敗)

            try
            {
                // 先給定strSQL一定有的欄位
                strSQL = "Update tblENTSubcontractor Set IssueState = " + IssueState + ",";

                if (Reviser != defString)
                    strSQL = strSQL + "Reviser = '" + Reviser + "',";

                if (ReviseDate != defDateTime)
                    strSQL = strSQL + "ReviseDate = To_Date('" + Strings.Format(ReviseDate, "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS'),";

                if (DataStamp != defInteger)
                    strSQL = strSQL + "DataStamp = DataStamp + 1 ,";

                if (Strings.InStr(1, strSQL, ",") != 0)   // 表示有要修改的欄位
                {
                    if (Strings.Right(strSQL, 1) == ",")
                    {
                        strSQL = Strings.Mid(strSQL, 1, Strings.Len(strSQL) - 1);
                    }

                    strSQL = strSQL + " Where SubcontractorNo ='" + SubcontractorNo + "'";
                    strSQL = strSQL + " And DataStamp = '" + DataStamp + "'";

                    // 呼叫執行SQL指令
                    ExecuteSQLNoneQuery(Conversions.ToString(DataBaseType), strConnectionString, ref strSQL, 1, true);
                }

                // //Return success
                SetSubcontractorIssueStateRet = "success";
            }

            catch (Exception e1)
            {
                SetSubcontractorIssueStateRet = "fail";
                // 發生錯誤時丟回本身的Function Name及系統錯誤訊息
                throw;

            } // New Exception("kcENT.SetSubcontractorIssueState: " & e1.Message)

            return SetSubcontractorIssueStateRet;

        }


        public string AddSubcontractorCont(string SubcontractorNo, string ContactorName, string TelNo = defString, string FaxNo = defString, string Title = defString, string Address = defString, string EMail = defString, string Description = defString, string AdditionalXml = "", string Creator = defString, DateTime CreateDate = default(DateTime))
        {
            string AddSubcontractorContRet = default(string);
            // 此 Function 將新增一筆資料
            // 傳入值: 各欄位新增值
            // 傳回值: success(成功), fail(失敗)

            try
            {
                strSQLAddField = "Insert into tblENTSubcontractorCont (SubcontractorNo,  ContactorName";
                strSQLAddValue = " Values ('" + SubcontractorNo + "','" + ContactorName + "'";

                if ((TelNo ?? "") != defString)
                {
                    strSQLAddField += ",TelNo";
                    strSQLAddValue += ",'" + TelNo + "'";
                }
                if ((FaxNo ?? "") != defString)
                {
                    strSQLAddField += ",FaxNo";
                    strSQLAddValue += ",'" + FaxNo + "'";
                }
                if ((Title ?? "") != defString)
                {
                    strSQLAddField += ",Title";
                    strSQLAddValue += ",'" + Title + "'";
                }
                if ((Address ?? "") != defString)
                {
                    strSQLAddField += ",Address";
                    strSQLAddValue += ",'" + Address + "'";
                }
                if ((EMail ?? "") != defString)
                {
                    strSQLAddField += ",EMail";
                    strSQLAddValue += ",'" + EMail + "'";
                }
                if ((Description ?? "") != defString)
                {
                    strSQLAddField += ",Description";
                    strSQLAddValue += ",'" + Description + "'";
                }
                if (Creator != defString)
                {
                    strSQLAddField = strSQLAddField + ",Creator";
                    strSQLAddValue = strSQLAddValue + ",'" + Creator + "'";
                }
                if (CreateDate != defDateTime)
                {
                    strSQLAddField = strSQLAddField + ",CreateDate";
                    strSQLAddValue = strSQLAddValue + ", To_Date('" + Strings.Format(CreateDate, "yyyy/MM/dd HH:mm:ss") + "','YYYY/MM/DD HH24:MI:SS')";
                }

                if (string.IsNullOrEmpty(AdditionalXml))
                {
                    // 當沒有額外的欄位時,直接給定strSQL
                    strSQL = strSQLAddField + ")" + strSQLAddValue + ")";
                }

                else
                {
                    // 加上additional的field & value 後傳回
                    strSQL = SeparateAddXML_Add(ref strSQLAddField, ref strSQLAddValue, AdditionalXml);

                }

                // //執行SQL指令
                ExecuteSQLNoneQuery(Conversions.ToString(DataBaseType), strConnectionString, ref strSQL);

                // //Return success
                AddSubcontractorContRet = "success";
            }

            catch (Exception e1)
            {
                AddSubcontractorContRet = "fail";
                // 發生錯誤時丟回本身的Function Name及系統錯誤訊息
                throw;

            } // New Exception("kcENT.AddSubcontractorCont: " & e1.Message)

            return AddSubcontractorContRet;

        }


        public string EditSubcontractorCont(string SubcontractorNo, string ContactorName, string TelNo = defString, string FaxNo = defString, string Title = defString, string Address = defString, string EMail = defString, string Description = defString, string AdditionalXml = "", int DataStamp = defInteger, string Reviser = defString, DateTime ReviseDate = default(DateTime))
        {
            string EditSubcontractorContRet = default(string);

            // 此 Function 將修改一筆資料
            // 傳入值: 各欄位修改值
            // 傳回值: success(成功), fail(失敗)

            try
            {
                // 先給定strSQL一定有的欄位
                strSQL = "Update tblENTSubcontractorCont Set ";

                if ((TelNo ?? "") != defString)
                {
                    strSQL += "TelNo = '" + TelNo + "',";
                }
                if ((FaxNo ?? "") != defString)
                {
                    strSQL += "FaxNo = '" + FaxNo + "',";
                }
                if ((Title ?? "") != defString)
                {
                    strSQL += "Title = '" + Title + "',";
                }
                if ((Address ?? "") != defString)
                {
                    strSQL += "Address = '" + Address + "',";
                }
                if ((EMail ?? "") != defString)
                {
                    strSQL += "EMail = '" + EMail + "',";
                }
                if ((Description ?? "") != defString)
                {
                    strSQL += "Description = '" + Description + "',";
                }

                if (Reviser != defString)
                    strSQL = strSQL + "Reviser = '" + Reviser + "',";

                if (ReviseDate != defDateTime)
                    strSQL = strSQL + "ReviseDate = To_Date('" + Strings.Format(ReviseDate, "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS'),";

                if (DataStamp != defInteger)
                    strSQL = strSQL + "DataStamp = DataStamp + 1 ,";

                // 有額外的欄位時再Append進原來的strSQL中
                if (!string.IsNullOrEmpty(AdditionalXml))
                {
                    // 加上additional的field & value
                    strSQL += SeparateAddXML_Edit(AdditionalXml);
                }

                // 去除strSQL中最後一個 ","
                if (Strings.InStr(1, strSQL, ",") != 0)   // 表示有要修改的欄位
                {
                    if (Strings.Right(strSQL, 1) == ",")
                    {
                        strSQL = Strings.Mid(strSQL, 1, Strings.Len(strSQL) - 1);
                    }

                    strSQL += " Where SubcontractorNo = '" + SubcontractorNo + "'" + " And ContactorName ='" + ContactorName + "'";
                    strSQL = strSQL + " And DataStamp = '" + DataStamp + "'";

                    // 有額外的條件式時再Append進原來的strSQL中
                    if (!string.IsNullOrEmpty(AdditionalXml))
                    {
                        // 加上additional的condition
                        strSQL += SeparateAddXML_Condition(AdditionalXml);
                    }

                    // 呼叫執行SQL指令
                    ExecuteSQLNoneQuery(Conversions.ToString(DataBaseType), strConnectionString, ref strSQL, 1, true);
                }

                // //Return success
                EditSubcontractorContRet = "success";
            }

            catch (Exception e1)
            {
                EditSubcontractorContRet = "fail";
                // 發生錯誤時丟回本身的Function Name及系統錯誤訊息
                throw;

            } // New Exception("kcENT.EditSubcontractorCont: " & e1.Message)

            return EditSubcontractorContRet;

        }

        public string DelSubcontractorCont(string SubcontractorNo, string ContactorName = defString, string AdditionalXml = "")
        {
            string DelSubcontractorContRet = default(string);
            // 此 Function 將刪除資料
            // 傳入值: 刪除的索引值
            // 傳回值: success(成功), fail(失敗)

            try
            {
                strSQL = "Delete From tblENTSubcontractorCont " + " Where SubcontractorNo='" + SubcontractorNo + "'";

                if ((ContactorName ?? "") != defString)
                {
                    strSQL += " And ContactorName = '" + ContactorName + "'";
                }

                if (!string.IsNullOrEmpty(AdditionalXml))
                {
                    // 加上additional的condition
                    strSQL += SeparateAddXML_Condition(AdditionalXml);
                }

                // 呼叫執行SQL指令
                ExecuteSQLNoneQuery(Conversions.ToString(DataBaseType), strConnectionString, ref strSQL);

                // //Return success
                DelSubcontractorContRet = "success";
            }

            catch (Exception e1)
            {
                DelSubcontractorContRet = "fail";
                // 發生錯誤時丟回本身的Function Name及系統錯誤訊息
                throw;

            } // New Exception("kcENT.DelSubcontractorCont: " & e1.Message)

            return DelSubcontractorContRet;

        }

        public string LoadSubcontractorCont(string SubcontractorNo = defString, string ContactorName = defString, string AdditionalXml = "")
        {
            string LoadSubcontractorContRet = default(string);
            // 此 Function 將資料以XML方式取出
            // 傳入值: 索引值
            // 傳回值: XML(成功), fail(失敗)

            var dsENT = default(DataSet);
            IDbConnection cnnTemp = null;

            try
            {
                // //Create connection
                cnnTemp = CreateConnection(strConnectionString);

                strSQL = "Select * From tblENTSubcontractorCont Where SubcontractorNo Is Not Null";

                // 有傳入SubcontractorNo表示只取該SubcontractorNo之資料
                if ((SubcontractorNo ?? "") != defString)
                {
                    strSQL += " And SubcontractorNo = '" + SubcontractorNo + "'";
                }
                if ((ContactorName ?? "") != defString)
                {
                    strSQL += " And ContactorName = '" + ContactorName + "'";
                }

                if (!string.IsNullOrEmpty(AdditionalXml))
                {
                    // 加上additional的condition
                    strSQL += SeparateAddXML_Condition(AdditionalXml);
                }

                // //Select data
                dsENT = new DataSet();
                ExecuteSQLQuery_Adapter(strSQL, dsENT, "tblENTSubcontractorCont", cnnTemp);

                // //Combine return value
                LoadSubcontractorContRet = CombineXMLReturnValue("loadSubcontractorcont", "tblENTSubcontractorCont", "DataSet", FormatXMLSchema(dsENT.GetXmlSchema()), dsENT.GetXml(), "");
            }

            catch (Exception e1)
            {
                LoadSubcontractorContRet = "fail";
                throw;
            } // New Exception("kcENT.LoadSubcontractorCont: " & e1.Message)

            finally
            {
                CloseConnection(cnnTemp);
                if (dsENT != null)
                {
                    dsENT.Dispose();
                }

            }

            return LoadSubcontractorContRet;

        }

        public DataSet ShowSubcontractorCont(string SubcontractorNo = defString, string ContactorName = defString, string AdditionalXml = "")
        {
            DataSet ShowSubcontractorContRet = default(DataSet);
            // 此 Function 將資料以 Dataset 方式取出
            // 傳入值: 索引值
            // 傳回值: Dataset(成功), Nothing(失敗)


            var dsENT = default(DataSet);
            IDbConnection cnnTemp = null;

            try
            {
                // //Create connection
                cnnTemp = CreateConnection(strConnectionString);

                strSQL = "Select * From tblENTSubcontractorCont Where SubcontractorNo Is Not Null";
                if ((SubcontractorNo ?? "") != defString)
                {
                    strSQL += " And SubcontractorNo = '" + SubcontractorNo + "'";
                }
                if ((ContactorName ?? "") != defString)
                {
                    strSQL += " And ContactorName = '" + ContactorName + "'";
                }

                if (!string.IsNullOrEmpty(AdditionalXml))
                {
                    // 加上additional的condition
                    strSQL += SeparateAddXML_Condition(AdditionalXml);
                }

                // //Select data
                dsENT = new DataSet();
                ExecuteSQLQuery_Adapter(strSQL, dsENT, "tblENTSubcontractorCont", cnnTemp);

                // //Return data
                ShowSubcontractorContRet = dsENT;
            }

            catch (Exception e1)
            {
                ShowSubcontractorContRet = null;
                throw;
            } // New Exception("kcENT.ShowSubcontractorCont: " & e1.Message)

            finally
            {
                CloseConnection(cnnTemp);
                if (dsENT != null)
                {
                    dsENT.Dispose();
                }

            }

            return ShowSubcontractorContRet;

        }

        public DataRow GetSubcontractorCont(string SubcontractorNo = defString, string ContactorName = defString, string AdditionalXml = "")
        {
            DataRow GetSubcontractorContRet = default(DataRow);
            // 此 Function 將資料以 DataRow 方式取出
            // 傳入值: 索引值
            // 傳回值: DataRow(成功), Nothing(失敗)


            var dsENT = default(DataSet);
            IDbConnection cnnTemp = null;

            try
            {
                // //Create connection
                cnnTemp = CreateConnection(strConnectionString);

                strSQL = "Select * From tblENTSubcontractorCont Where SubcontractorNo Is Not Null";
                if ((SubcontractorNo ?? "") != defString)
                {
                    strSQL += " And SubcontractorNo = '" + SubcontractorNo + "'";
                }
                if ((ContactorName ?? "") != defString)
                {
                    strSQL += " And ContactorName = '" + ContactorName + "'";
                }

                if (!string.IsNullOrEmpty(AdditionalXml))
                {
                    // 加上additional的condition
                    strSQL += SeparateAddXML_Condition(AdditionalXml);
                }

                // //Select data
                dsENT = new DataSet();
                ExecuteSQLQuery_Adapter(strSQL, dsENT, "tblENTSubcontractorCont", cnnTemp);

                // //Return data
                if (dsENT.Tables[0].Rows.Count > 0)
                {
                    GetSubcontractorContRet = dsENT.Tables[0].Rows[0];
                }
                else
                {
                    GetSubcontractorContRet = dsENT.Tables[0].NewRow();
                }
            }
            catch (Exception e1)
            {
                GetSubcontractorContRet = null;
                throw;
            } // New Exception("kcENT.GetSubcontractorCont: " & e1.Message)

            finally
            {
                CloseConnection(cnnTemp);
                if (dsENT != null)
                {
                    dsENT.Dispose();
                }

            }

            return GetSubcontractorContRet;

        }



        #endregion

        #region "test14278"

        public string AddTestDataBasis_14278(string SubcontractorNo, string SubcontractorName, string Description = defString, string Creator = defString, DateTime CreateDate = default(DateTime), string AdditionalXml = "")
        {
            string AddSubcontractorRet = default(string);
            // 此 Function 將新增一筆資料
            // 傳入值: 各欄位新增值
            // 傳回值: success(成功), fail(失敗)

            if (CreateDate == defDateTime)
                CreateDate = DateTime.Now;

            try
            {
                strSQLAddField = "Insert into TBLENTTESTDATA14278 (SubcontractorNo, SubcontractorName, IssueState";
                strSQLAddValue = " Values ('" + SubcontractorNo + "','" + SubcontractorName + "', 0";

                if ((Description ?? "") != defString)
                {
                    strSQLAddField += ",Description";
                    strSQLAddValue += ",'" + Description + "'";
                }
                if ((Creator ?? "") != defString)
                {
                    strSQLAddField += ",Creator";
                    strSQLAddValue += ",'" + Creator + "'";
                }
                if (CreateDate != defDateTime)
                {
                    strSQLAddField += ",CreateDate";
                    strSQLAddValue += ", To_Date('" + Strings.Format(Conversions.ToDate(CreateDate), "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS')";
                }

                if (string.IsNullOrEmpty(AdditionalXml))
                {
                    // 當沒有額外的欄位時,直接給定strSQL
                    strSQL = strSQLAddField + ")" + strSQLAddValue + ")";
                }

                else
                {
                    // 加上additional的field & value 後傳回
                    strSQL = SeparateAddXML_Add(ref strSQLAddField, ref strSQLAddValue, AdditionalXml);

                }

                // //執行SQL指令
                ExecuteSQLNoneQuery(Conversions.ToString(DataBaseType), strConnectionString, ref strSQL);

                // //Return success
                AddSubcontractorRet = "success";
            }

            catch (Exception e1)
            {
                AddSubcontractorRet = "fail";
                // 發生錯誤時丟回本身的Function Name及系統錯誤訊息
                throw;

            } // New Exception("kcENT.AddSubcontractor: " & e1.Message)

            return AddSubcontractorRet;

        }

        public string EditTestDataBasis_14278(string SubcontractorNo, string SubcontractorName = defString, string Description = defString, string AdditionalXml = "", int DataStamp = defInteger, string Reviser = defString, DateTime ReviseDate = default(DateTime))
        {
            string EditSubcontractorRet = default(string);
            // 此 Function 將修改一筆資料
            // 傳入值: 各欄位修改值
            // 傳回值: success(成功), fail(失敗)

            try
            {
                // 先給定strSQL一定有的欄位
                strSQL = "Update TBLENTTESTDATA14278 Set ";

                if ((SubcontractorName ?? "") != defString)
                {
                    strSQL += "SubcontractorName = '" + SubcontractorName + "',";
                }
                if ((Description ?? "") != defString)
                {
                    strSQL += "Description = '" + Description + "',";
                }

                if (Reviser != defString)
                    strSQL = strSQL + "Reviser = '" + Reviser + "',";

                if (ReviseDate != defDateTime)
                    strSQL = strSQL + "ReviseDate = To_Date('" + Strings.Format(ReviseDate, "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS'),";

                if (DataStamp != defInteger)
                    strSQL = strSQL + "DataStamp = DataStamp + 1 ,";

                // 有額外的欄位時再Append進原來的strSQL中
                if (!string.IsNullOrEmpty(AdditionalXml))
                {
                    // 加上additional的field & value
                    strSQL += SeparateAddXML_Edit(AdditionalXml);
                }

                // 去除strSQL中最後一個 ","
                if (Strings.InStr(1, strSQL, ",") != 0)   // 表示有要修改的欄位
                {
                    if (Strings.Right(strSQL, 1) == ",")
                    {
                        strSQL = Strings.Mid(strSQL, 1, Strings.Len(strSQL) - 1);
                    }

                    strSQL += " Where SubcontractorNo ='" + SubcontractorNo + "'";
                    strSQL = strSQL + " And DataStamp = '" + DataStamp + "'";

                    // 有額外的條件式時再Append進原來的strSQL中
                    if (!string.IsNullOrEmpty(AdditionalXml))
                    {
                        // 加上additional的condition
                        strSQL += SeparateAddXML_Condition(AdditionalXml);
                    }

                    // 呼叫執行SQL指令
                    ExecuteSQLNoneQuery(Conversions.ToString(DataBaseType), strConnectionString, ref strSQL, 1, true);
                }

                // //Return success
                EditSubcontractorRet = "success";
            }

            catch (Exception e1)
            {
                EditSubcontractorRet = "fail";
                // 發生錯誤時丟回本身的Function Name及系統錯誤訊息
                throw;

            } // New Exception("kcENT.EditSubcontractor: " & e1.Message)

            return EditSubcontractorRet;

        }
        public string DelTestDataBasis_14278(string SubcontractorNo, string AdditionalXml = "")
        {
            string DelSubcontractorRet = default(string);
            // 此 Function 將刪除資料
            // 傳入值: 刪除的索引值
            // 傳回值: success(成功), fail(失敗)
            var CollectionSQL = new Collection();

            try
            {
                // 1. 刪除Contactor
                strSQL = "Delete From tblENTTestDataDetail_14278 " + "Where SubcontractorNo='" + SubcontractorNo + "'";
                CollectionSQL.Add(strSQL);

                // 2. 刪除主檔
                strSQL = "Delete From TBLENTTESTDATA14278 " + " Where SubcontractorNo ='" + SubcontractorNo + "'";

                if (!string.IsNullOrEmpty(AdditionalXml))
                {
                    // 加上additional的condition
                    strSQL += SeparateAddXML_Condition(AdditionalXml);
                }

                CollectionSQL.Add(strSQL);

                // 呼叫執行SQL指令
                ExecuteSQLNoneQuery_UPD(Conversions.ToString(DataBaseType), strConnectionString, CollectionSQL);

                // //Return success
                DelSubcontractorRet = "success";
            }

            catch (Exception e1)
            {
                DelSubcontractorRet = "fail";
                // 發生錯誤時丟回本身的Function Name及系統錯誤訊息
                throw;

            } // New Exception("kcENT.DelSubcontractor: " & e1.Message)

            return DelSubcontractorRet;

        }

        public string LoadTestDataBasis_14278(string SubcontractorNo = defString, int IssueState = defInteger, string AdditionalXml = "")
        {
            string LoadSubcontractorRet = default(string);
            // 此 Function 將資料以XML方式取出
            // 傳入值: 索引值
            // 傳回值: XML(成功), fail(失敗)

            var dsENT = default(DataSet);
            IDbConnection cnnTemp = null;
          
            try
            {
                // //Select data
                dsENT = new DataSet();
                dsENT = ShowTestDataBasis_14278();
 
                // //Combine return value
                LoadSubcontractorRet = CombineXMLReturnValue("TestDataBasis", "a", "DataSet", FormatXMLSchema(dsENT.GetXmlSchema()), dsENT.GetXml(), "");
            }

            catch (Exception e1)
            {
                LoadSubcontractorRet = "fail";
                throw;
            } // New Exception("kcENT.LoadSubcontractor: " & e1.Message)

            finally
            {
                CloseConnection(cnnTemp);
                if (dsENT != null)
                {
                    dsENT.Dispose();
                }

            }

            return LoadSubcontractorRet;

        }

        public DataSet ShowTestDataBasis_14278(string SubcontractorNo = defString, int IssueState = defInteger, string AdditionalXml = "")
        {
            DataSet ShowSubcontractorRet = default(DataSet);
            // 此 Function 將資料以 Dataset 方式取出
            // 傳入值: 索引值
            // 傳回值: Dataset(成功), Nothing(失敗)

            var dsENT = default(DataSet);
            IDbConnection cnnTemp = null;

            try
            {
                // //Create connection
                cnnTemp = CreateConnection(strConnectionString);

                strSQL = "Select * From TBLENTTESTDATA14278 Where SubcontractorNo Is Not Null";

                if ((SubcontractorNo ?? "") != defString)
                {
                    strSQL += " And SubcontractorNo = '" + SubcontractorNo + "'";
                }
                if (IssueState != defInteger)
                {
                    strSQL += " And IssueState = " + IssueState;
                }

                if (!string.IsNullOrEmpty(AdditionalXml))
                {
                    // 加上additional的condition
                    strSQL += SeparateAddXML_Condition(AdditionalXml);
                }

                // //Select data
                dsENT = new DataSet();
                ExecuteSQLQuery_Adapter(strSQL, dsENT, "a", cnnTemp);

                // //Return data
                ShowSubcontractorRet = dsENT;
            }

            catch (Exception e1)
            {
                ShowSubcontractorRet = null;
                throw;
            } // New Exception("kcENT.ShowSubcontractor: " & e1.Message)

            finally
            {
                CloseConnection(cnnTemp);
                if (dsENT != null)
                {
                    dsENT.Dispose();
                }

            }

            return ShowSubcontractorRet;

        }

        public DataRow GetTestDataBasis_14278(string SubcontractorNo = defString, int IssueState = defInteger, string AdditionalXml = "")
        {
            DataRow GetSubcontractorRet = default(DataRow);
            // 此 Function 將資料以 DataRow 方式取出
            // 傳入值: 索引值
            // 傳回值: DataRow(成功), Nothing(失敗)

            var dsENT = default(DataSet);
            IDbConnection cnnTemp = null;

            try
            {
                // //Create connection
                cnnTemp = CreateConnection(strConnectionString);

                strSQL = "Select * From TBLENTTESTDATA14278 Where SubcontractorNo Is Not Null";

                if ((SubcontractorNo ?? "") != defString)
                {
                    strSQL += " And SubcontractorNo = '" + SubcontractorNo + "'";
                }
                if (IssueState != defInteger)
                {
                    strSQL += " And IssueState = " + IssueState;
                }

                if (!string.IsNullOrEmpty(AdditionalXml))
                {
                    // 加上additional的condition
                    strSQL += SeparateAddXML_Condition(AdditionalXml);
                }

                // //Select data
                dsENT = new DataSet();
                ExecuteSQLQuery_Adapter(strSQL, dsENT, "tblENTSubcontractor", cnnTemp);

                // //Return data
                if (dsENT.Tables[0].Rows.Count > 0)
                {
                    GetSubcontractorRet = dsENT.Tables[0].Rows[0];
                }
                else
                {
                    GetSubcontractorRet = dsENT.Tables[0].NewRow();
                }
            }
            catch (Exception e1)
            {
                GetSubcontractorRet = null;
                throw;
            } // New Exception("kcENT.GetSubcontractor: " & e1.Message)

            finally
            {
                CloseConnection(cnnTemp);
                if (dsENT != null)
                {
                    dsENT.Dispose();
                }

            }

            return GetSubcontractorRet;

        }

        public string SetTestDataBasis_14278IssueState(string SubcontractorNo, int IssueState, int DataStamp = defInteger, string Reviser = defString, DateTime ReviseDate = default(DateTime))
        {
            string SetSubcontractorIssueStateRet = default(string);
            // 此 Function 將修改IssueState欄位的值
            // 傳入值: IssueState修改後的值及VendorNo
            // 傳回值: success(成功), fail(失敗)

            try
            {
                // 先給定strSQL一定有的欄位
                strSQL = "Update TBLENTTESTDATA14278 Set IssueState = " + IssueState + ",";

                if (Reviser != defString)
                    strSQL = strSQL + "Reviser = '" + Reviser + "',";

                if (ReviseDate != defDateTime)
                    strSQL = strSQL + "ReviseDate = To_Date('" + Strings.Format(ReviseDate, "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS'),";

                if (DataStamp != defInteger)
                    strSQL = strSQL + "DataStamp = DataStamp + 1 ,";

                if (Strings.InStr(1, strSQL, ",") != 0)   // 表示有要修改的欄位
                {
                    if (Strings.Right(strSQL, 1) == ",")
                    {
                        strSQL = Strings.Mid(strSQL, 1, Strings.Len(strSQL) - 1);
                    }

                    strSQL = strSQL + " Where SubcontractorNo ='" + SubcontractorNo + "'";
                    strSQL = strSQL + " And DataStamp = '" + DataStamp + "'";

                    // 呼叫執行SQL指令
                    ExecuteSQLNoneQuery(Conversions.ToString(DataBaseType), strConnectionString, ref strSQL, 1, true);
                }

                // //Return success
                SetSubcontractorIssueStateRet = "success";
            }

            catch (Exception e1)
            {
                SetSubcontractorIssueStateRet = "fail";
                // 發生錯誤時丟回本身的Function Name及系統錯誤訊息
                throw;

            } // New Exception("kcENT.SetSubcontractorIssueState: " & e1.Message)

            return SetSubcontractorIssueStateRet;

        }
        #endregion

    }
}
