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 clsENT : 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 clsENT() { // 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 } }