模組化資料庫的存取

  • 2673
  • 0
  • C#
  • 2014-08-22

模組化資料庫的存取

對資料庫的操作模組化,日後有資料庫存取的需求只要參考該組件,然後引用方法就可以取回資料庫內的資料了。

 

DAL 說明文件,點我下載

 

原始碼:

using System;
using System.Data;
using System.Data.SqlClient;
using System.Collections;
using SecurityData;

namespace DAL
{
    /// <summary>
    /// MS-SQL 資料庫公用存取類別
    /// </summary>
    public class SQLDB
    {
        #region 內建變數
        /// <summary>
        /// 資料庫主機位址
        /// </summary>
        internal static string __DBServerIP = "127.0.0.1";
        /// <summary>
        /// 資料庫名稱 
        /// </summary>
        internal static string __DBName = "NorthWind";
        /// <summary>
        /// 資料庫登入帳號
        /// </summary>
        internal static string __DBLoginID = "sa";
        /// <summary>
        /// 資料庫登入密碼
        /// </summary>
        internal static string __DBLoginPwd = "password";
        #endregion

        #region 屬性設定
        /// <summary>
        /// 讀取/設定 資料庫主機位址
        /// </summary>
        /// <remarks>讀取或是設定資料庫主機的 IP 位址。</remarks>
        /// <value>IP 位址</value>
        public string DBServerIP
        {
            get
            {
                return __DBServerIP;
            }
            set
            {
                __DBServerIP = value;
            }
        }

        /// <summary>
        /// 讀取/設定 資料庫名稱 
        /// </summary>
        /// <remarks>讀取或是設定要連線的資料庫名稱。</remarks>
        /// <value>資料庫名稱</value>
        public string DBName
        {
            get
            {
                return __DBName;
            }
            set
            {
                __DBName = value;
            }
        }

        /// <summary>
        /// 設定 資料庫登入帳號
        /// </summary>
        /// <remarks>讀取或是設定連線所要使用的帳號名稱。</remarks>
        /// <value>連線帳號名稱</value>
        public string SetDBLoginID
        {
            set
            {
                __DBLoginID = value;
            }
        }

        /// <summary>
        /// 設定 資料庫登入密碼
        /// </summary>
        /// <remarks>讀取或是設定連線帳號所使用密碼。</remarks>
        /// <value>連線帳號的密碼</value>
        public string SetDBLoginPwd
        {
            set
            {
                __DBLoginPwd = value;
            }
        }
        #endregion

        #region 初始化資料庫公用元件庫
        /// <summary>
        /// 初始化資料庫公用元件庫
        /// </summary>
        /// <remarks>依照預設值初始化元件庫</remarks>
        public SQLDB()
        {
            LoadDefaultSetting();
        }

        /// <summary>
        /// 載入預設值
        /// </summary>
        private void LoadDefaultSetting()
        {
            __DBServerIP = Config.GetDBServerIP;
            __DBName = Config.GetDBName;
            __DBLoginID = Config.GetDBLoginID;
            __DBLoginPwd = Config.GetDBLoginPwd;
        }

        /// <summary>
        /// 依指定IP位址、資料庫名稱與登入帳號和密碼,來初始化資料庫公用元件庫。
        /// </summary>
        /// <param name="DataBaseServerIP">資料庫主機位址</param>
        /// <param name="DataBaseName">資料庫名稱</param>
        /// <param name="DataBaseLoginID">資料庫登入帳號</param>
        /// <param name="DataBaseLoginPassword">資料庫登入密碼</param>
        /// <remarks>初始化元件庫,並同時設定資料庫主機位址、連線資料庫名稱、登入帳號與登入密碼。</remarks>
        public SQLDB(string DataBaseServerIP, string DataBaseName, string DataBaseLoginID, string DataBaseLoginPassword)
        {
            __DBServerIP = DataBaseServerIP.Trim();
            __DBName = DataBaseName.Trim();
            __DBLoginID = DataBaseLoginID.Trim();
            __DBLoginPwd = DataBaseLoginPassword.Trim();
        }

        /// <summary>
        /// 依指定IP位址、資料庫名稱,來初始化資料庫公用元件庫。
        /// </summary>
        /// <param name="DataBaseServerIP">資料庫主機位址</param>
        /// <param name="DataBaseName">資料庫名稱</param>
        /// <remarks>初始化元件庫,並同時設定資料庫主機位址、連線資料庫名稱。</remarks>
        public SQLDB(string DataBaseServerIP, string DataBaseName)
        {
            __DBServerIP = DataBaseServerIP.Trim();
            __DBName = DataBaseName.Trim();
        }

        /// <summary>
        /// 依指定資料庫名稱,來初始化資料庫公用元件庫。
        /// </summary>
        /// <param name="DataBaseName">資料庫名稱</param>
        /// <remarks>初始化元件庫,並設定連線資料庫名稱。</remarks>
        public SQLDB(string DataBaseName)
        {
            __DBName = DataBaseName.Trim();
        }
        #endregion

        #region 取得 Connection 物件
        /// <summary>
        /// 取得 SQL 連線物件
        /// </summary>
        /// <remarks>使用系統預設連線參數,取回 SQL 連線物件 SqlConnection。</remarks>
        /// <returns>連線物件</returns>
        public SqlConnection DBConn()
        {
            return DBConn(__DBServerIP, __DBName, __DBLoginID, __DBLoginPwd);
        }

        /// <summary>
        /// 指定資料庫名稱,並取得 SQL 連線物件
        /// </summary>
        /// <param name="DatabaseName">要連線的資料庫名稱</param>
        /// <remarks>指定連線資料庫,並取回 SQL 連線物件 SqlConnection。</remarks>
        /// <returns>連線物件</returns>
        public SqlConnection DBConn(string DatabaseName)
        {
            return DBConn(__DBServerIP, DatabaseName, __DBLoginID, __DBLoginPwd);
        }

        /// <summary>
        /// 指定主機IP位址、資料庫名稱,並取得 SQL 連線物件
        /// </summary>
        /// <param name="ServerName">伺服器名稱/IP位址</param>
        /// <param name="DatabaseName">要連線的資料庫名稱</param>
        /// <remarks>指定資料庫主機 IP 位址與連線資料庫,並取回 SQL 連線物件 SqlConnection。</remarks>
        /// <returns>連線物件</returns>
        public SqlConnection DBConn(string ServerName, string DatabaseName)
        {
            return DBConn(ServerName, DatabaseName, __DBLoginID, __DBLoginPwd);
        }

        /// <summary>
        /// 指定主機IP位址、資料庫名稱與登入帳號和密碼,並取得 SQL 連線物件
        /// </summary>
        /// <param name="ServerName">伺服器名稱/IP位址</param>
        /// <param name="DatabaseName">要連線的資料庫名稱</param>
        /// <param name="LoginID">登入帳號</param>
        /// <param name="LoginPwd">登入密碼</param>
        /// <remarks>指定資料庫主機 IP 位址、連線資料庫、登入帳號和密碼,並取回 SQL 連線物件 SqlConnection。</remarks>
        /// <returns>連線物件</returns>
        public SqlConnection DBConn(string ServerName, string DatabaseName, string LoginID, string LoginPwd)
        {
            SqlConnection conSQL = new SqlConnection();
            conSQL.ConnectionString = string.Format("Server={0};Database={1};Integrated Security=False;User ID={2};Password={3}", new object[] { ServerName, DatabaseName, LoginID, LoginPwd });
            try
            {
                conSQL.Open();
                return conSQL;
            }
            catch
            {
                return null;
            }
        }
        #endregion

        #region 取得 Command 物件
        /// <summary>
        /// 指定 SQL 指令字串來取得 SQL 命令物件
        /// </summary>
        /// <param name="DBConnection">SQL 連線物件</param>
        /// <param name="DBCmdText">SQL 指令字串</param>
        /// <remarks>依 SQL 查詢字串,取回 SQL 命令物件 (SqlCommand)。</remarks>
        /// <returns>命令物件</returns>
        public SqlCommand DBCommand(SqlConnection DBConnection, string DBCmdText)
        {
            return DBCommand(DBConnection, DBCmdText, null, CommandType.Text);
        }

        /// <summary>
        /// 指定 SQL 指令字串來取得 SQL 命令物件,並輸出交易物件
        /// </summary>
        /// <param name="DBConnection">SQL 連線物件</param>
        /// <param name="DBCmdText">SQL 指令字串</param>
        /// <param name="DBTrans">SQL 交易物件</param>
        /// <remarks>依 SQL 查詢字串,取回 SQL 命令物件 (SqlCommand)。</remarks>
        /// <returns>命令物件與輸出 SQL 交易物件</returns>
        public SqlCommand DBCommand(SqlConnection DBConnection, string DBCmdText, out SqlTransaction DBTrans)
        {
            return DBCommand(DBConnection, DBCmdText, null, CommandType.Text, out DBTrans);
        }

        /// <summary>
        /// 指定 SQL 指令字串,與指令集的模式來取得 SQL 命令物件
        /// </summary>
        /// <param name="DBConnection">SQL 連線物件</param>
        /// <param name="DBCmdText">SQL 指令字串</param>
        /// <param name="DBCmdType">SQL 指令集模式</param>
        /// <remarks>依 SQL 查詢字串,取回 SQL 命令物件 (SqlCommand)。</remarks>
        /// <returns>命令物件</returns>
        public SqlCommand DBCommand(SqlConnection DBConnection, string DBCmdText, CommandType DBCmdType)
        {
            return DBCommand(DBConnection, DBCmdText, null, DBCmdType);
        }

        /// <summary>
        /// 指定 SQL 指令字串,與指令集的模式來取得 SQL 命令物件,並輸出交易物件
        /// </summary>
        /// <param name="DBConnection">SQL 連線物件</param>
        /// <param name="DBCmdText">SQL 指令字串</param>
        /// <param name="DBCmdType">SQL 指令集模式</param>
        /// <param name="DBTrans">SQL 交易物件</param>
        /// <remarks>依 SQL 查詢字串,取回 SQL 命令物件 (SqlCommand)。</remarks>
        /// <returns>命令物件與輸出 SQL 交易物件</returns>
        public SqlCommand DBCommand(SqlConnection DBConnection, string DBCmdText, CommandType DBCmdType, out SqlTransaction DBTrans)
        {
            return DBCommand(DBConnection, DBCmdText, null, DBCmdType, out DBTrans);
        }

        /// <summary>
        /// 指定 SQL 指令字串,與參數集來取得 SQL 命令物件
        /// </summary>
        /// <param name="DBConnection">SQL 連線物件</param>
        /// <param name="DBCmdText">SQL 指令字串</param>
        /// <param name="DBCmdParameters">SQL 指令集的參數</param>
        /// <remarks>依 SQL 查詢字串與參數集,取回 SQL 命令物件 (SqlCommand)。</remarks>
        /// <returns>命令物件</returns>
        public SqlCommand DBCommand(SqlConnection DBConnection, string DBCmdText, SqlParameterCollection DBCmdParameters)
        {
            return DBCommand(DBConnection, DBCmdText, DBCmdParameters, CommandType.Text);
        }

        /// <summary>
        /// 指定 SQL 指令字串,與參數集來取得 SQL 命令物件,並輸出交易物件
        /// </summary>
        /// <param name="DBConnection">SQL 連線物件</param>
        /// <param name="DBCmdText">SQL 指令字串</param>
        /// <param name="DBCmdParameters">SQL 指令集的參數</param>
        /// <param name="DBTrans">SQL 交易物件</param>
        /// <remarks>依 SQL 查詢字串與參數集,取回 SQL 命令物件 (SqlCommand)。</remarks>
        /// <returns>命令物件與輸出 SQL 交易物件</returns>
        public SqlCommand DBCommand(SqlConnection DBConnection, string DBCmdText, SqlParameterCollection DBCmdParameters, out SqlTransaction DBTrans)
        {
            return DBCommand(DBConnection, DBCmdText, DBCmdParameters, CommandType.Text, out DBTrans);
        }

        /// <summary>
        /// 指定 SQL 指令字串和參數,與指令集的模式來取得 SQL 命令物件
        /// </summary>
        /// <param name="DBConnection">SQL 連線物件</param>
        /// <param name="DBCmdText">SQL 指令字串</param>
        /// <param name="DBCmdParameters">SQL 指令集的參數</param>
        /// <param name="DBCmdType">SQL 指令集模式</param>
        /// <remarks>依 SQL 查詢字串與參數集,取回 SQL 命令物件 (SqlCommand)。</remarks>
        /// <returns>命令物件</returns>
        public SqlCommand DBCommand(SqlConnection DBConnection, string DBCmdText, SqlParameterCollection DBCmdParameters, CommandType DBCmdType)
        {
            SqlCommand cmdSQL = new SqlCommand();
            try
            {
                cmdSQL.Connection = DBConnection;
                cmdSQL.CommandType = DBCmdType;
                cmdSQL.CommandText = DBCmdText;
                if (DBCmdParameters == null) return cmdSQL;

                cmdSQL.Parameters.Clear();
                foreach (SqlParameter tmpPara in DBCmdParameters)
                {
                    cmdSQL.Parameters.Add(tmpPara.ParameterName, tmpPara.SqlDbType).Value = tmpPara.Value;
                }
                return cmdSQL;
            }
            catch
            {
                return null;
            }
        }

        /// <summary>
        /// 指定 SQL 指令字串和參數,與指令集的模式來取得 SQL 命令物件,並輸出交易物件
        /// </summary>
        /// <param name="DBConnection">SQL 連線物件</param>
        /// <param name="DBCmdText">SQL 指令字串</param>
        /// <param name="DBCmdParameters">SQL 指令集的參數</param>
        /// <param name="DBCmdType">SQL 指令集模式</param>
        /// <param name="DBTrans">SQL 交易物件</param>
        /// <remarks>依 SQL 查詢字串與參數集,取回 SQL 命令物件 (SqlCommand)。</remarks>
        /// <returns>命令物件與輸出 SQL 交易物件</returns>
        public SqlCommand DBCommand(SqlConnection DBConnection, string DBCmdText, SqlParameterCollection DBCmdParameters, CommandType DBCmdType, out SqlTransaction DBTrans)
        {
            SqlCommand cmdSQL = new SqlCommand();
            try
            {
                cmdSQL.Connection = DBConnection;
                DBTrans = DBConnection.BeginTransaction();
                cmdSQL.CommandType = DBCmdType;
                cmdSQL.CommandText = DBCmdText;
                cmdSQL.Transaction = DBTrans;
                if (DBCmdParameters == null) return cmdSQL;

                cmdSQL.Parameters.Clear();
                foreach (SqlParameter tmpPara in DBCmdParameters)
                {
                    cmdSQL.Parameters.Add(tmpPara.ParameterName, tmpPara.SqlDbType).Value = tmpPara.Value;
                }
                return cmdSQL;
            }
            catch
            {
                DBTrans = null;
                return null;
            }
        }
        #endregion

        #region 取得 Dataset 資料
        /// <summary>
        /// 使用 SQL 命令物件來取得資料集(DataSet)
        /// </summary>
        /// <param name="DBCommands">SQL 命令物件</param>
        /// <remarks>依 SQL 命令物件,取回查詢資料並存入資料集。</remarks>
        /// <returns>查詢資料集</returns>
        public DataSet GetDataSet(SqlCommand DBCommands)
        {
            return GetDataSet(DBCommands, "", "");
        }

        /// <summary>
        /// 使用 SQL 命令物件來取得資料集(DataSet),並設定資料集的名稱
        /// </summary>
        /// <param name="DBCommands">SQL 命令物件</param>
        /// <param name="DatasetName">定義資料集名稱</param>
        /// <remarks>依 SQL 命令物件,取回查詢資料並存入資料集。</remarks>
        /// <returns>查詢資料集</returns>
        public DataSet GetDataSet(SqlCommand DBCommands, string DatasetName)
        {
            return GetDataSet(DBCommands, DatasetName, "");
        }

        /// <summary>
        /// 使用 SQL 命令物件來取得資料集(DataSet),並設定資料集的名稱與命名空間
        /// </summary>
        /// <param name="DBCommands">SQL 命令物件</param>
        /// <param name="DatasetName">定義資料集名稱</param>
        /// <param name="DatasetNamespace">定義資料集命名空間</param>
        /// <remarks>依 SQL 命令物件,取回查詢資料並存入資料集。</remarks>
        /// <returns>查詢資料集</returns>
        public DataSet GetDataSet(SqlCommand DBCommands, string DatasetName, string DatasetNamespace)
        {
            DataSet tmpDataset = new DataSet();
            SqlDataAdapter sdaSQL = new SqlDataAdapter();

            try
            {
                sdaSQL.SelectCommand = DBCommands;
                sdaSQL.Fill(tmpDataset);

                if (DatasetName.Trim() == "") DatasetName = "dataset1";
                if (DatasetNamespace.Trim() == "") DatasetNamespace = "namespace1";

                tmpDataset.DataSetName = DatasetName.Trim();
                tmpDataset.Namespace = DatasetNamespace.Trim();
            }
            catch { }

            sdaSQL.Dispose();
            return tmpDataset;
        }

        /// <summary>
        /// 使用 SQL 指令字串和參數集來取得資料集(DataSet)
        /// </summary>
        /// <param name="DBCmdText">SQL 指令字串</param>
        /// <param name="DBCmdParameters">SQL 指令集的參數</param>
        /// <remarks>依 SQL 命令物件與參數集,取回查詢資料並存入資料集。</remarks>
        /// <returns>查詢資料集</returns>
        public DataSet GetDataSet(string DBCmdText, SqlParameterCollection DBCmdParameters)
        {
            return GetDataSet(DBCmdText, DBCmdParameters, CommandType.Text, "", "");
        }

        /// <summary>
        /// 使用 SQL 指令字串和參數集,與指令集的模式來取得資料集(DataSet)
        /// </summary>
        /// <param name="DBCmdText">SQL 指令字串</param>
        /// <param name="DBCmdParameters">SQL 指令集的參數</param>
        /// <param name="DBCmdType">SQL 指令集模式</param>
        /// <remarks>依 SQL 命令物件與參數集,取回查詢資料並存入資料集。</remarks>
        /// <returns>查詢資料集</returns>
        public DataSet GetDataSet(string DBCmdText, SqlParameterCollection DBCmdParameters, CommandType DBCmdType)
        {
            return GetDataSet(DBCmdText, DBCmdParameters, DBCmdType, "", "");
        }

        /// <summary>
        /// 使用 SQL 指令字串和參數集,與指令集的模式來取得資料集(DataSet),並設定資料集的名稱
        /// </summary>
        /// <param name="DBCmdText">SQL 指令字串</param>
        /// <param name="DBCmdParameters">SQL 指令集的參數</param>
        /// <param name="DBCmdType">SQL 指令集模式</param>
        /// <param name="DatasetName">定義資料集名稱</param>
        /// <remarks>依 SQL 命令物件與參數集,取回查詢資料並存入資料集。</remarks>
        /// <returns>查詢資料集</returns>
        public DataSet GetDataSet(string DBCmdText, SqlParameterCollection DBCmdParameters, CommandType DBCmdType, string DatasetName)
        {
            return GetDataSet(DBCmdText, DBCmdParameters, DBCmdType, DatasetName, "");
        }

        /// <summary>
        /// 使用 SQL 指令字串和參數集,與指令集的模式來取得資料集(DataSet),並設定資料集的名稱與命名空間
        /// </summary>
        /// <param name="DBCmdText">SQL 指令字串</param>
        /// <param name="DBCmdParameters">SQL 指令集的參數</param>
        /// <param name="DBCmdType">SQL 指令集模式</param>
        /// <param name="DatasetName">定義資料集名稱</param>
        /// <param name="DatasetNamespace">定義資料集命名空間</param>
        /// <remarks>依 SQL 命令物件與參數集,取回查詢資料並存入資料集。</remarks>
        /// <returns>查詢資料集</returns>
        public DataSet GetDataSet(string DBCmdText, SqlParameterCollection DBCmdParameters, CommandType DBCmdType, string DatasetName, string DatasetNamespace)
        {
            SqlCommand cmdSQL = new SqlCommand();
            DataSet tmpDataSet = new DataSet();

            try
            {
                cmdSQL = DBCommand(DBConn(), DBCmdText, DBCmdParameters, DBCmdType);
                tmpDataSet = GetDataSet(cmdSQL, DatasetName, DatasetNamespace);
            }
            catch { }
            cmdSQL.Dispose();
            return tmpDataSet;
        }
        #endregion

        #region 取得 Datatable 資料
        /// <summary>
        /// 使用 SQL 命令物件來取得資料表(DataTable)
        /// </summary>
        /// <param name="DBCommands">SQL 命令物件</param>
        /// <remarks>依 SQL 命令物件,取回查詢資料並存入資料表。</remarks>
        /// <returns>查詢資料表</returns>
        public DataTable GetDataTable(SqlCommand DBCommands)
        {
            return GetDataTable(DBCommands, "");
        }

        /// <summary>
        /// 使用 SQL 命令物件來取得資料表(DataTable),並設定資料表名稱
        /// </summary>
        /// <param name="DBCommands">SQL 命令物件</param>
        /// <param name="TableName">定義資料表名稱</param>
        /// <remarks>依 SQL 命令物件,取回查詢資料並存入資料表。</remarks>
        /// <returns>查詢資料表</returns>
        public DataTable GetDataTable(SqlCommand DBCommands, string TableName)
        {
            DataTable tmpDataTable = new DataTable();
            SqlDataAdapter sdaSQL = new SqlDataAdapter();
            try
            {
                sdaSQL.SelectCommand = DBCommands;
                sdaSQL.Fill(tmpDataTable);
                if (TableName.Trim() == "") TableName = "table1";
                tmpDataTable.TableName = TableName.Trim();
            }
            catch
            {
                tmpDataTable = null;
            }
            finally
            {
                sdaSQL.Dispose();
            }
            return tmpDataTable;
        }

        /// <summary>
        /// 使用 SQL 指令字串與參數集來取得資料表(DataTable)
        /// </summary>
        /// <param name="DBCmdText">SQL 指令字串</param>
        /// <param name="DBCmdParameters">SQL 指令集的參數</param>
        /// <remarks>依 SQL 命令物件與參數集,取回查詢資料並存入資料表。</remarks>
        /// <returns>查詢資料表</returns>
        public DataTable GetDataTable(string DBCmdText, SqlParameterCollection DBCmdParameters)
        {
            return GetDataTable(DBCmdText, DBCmdParameters, CommandType.Text, "");
        }

        /// <summary>
        /// 使用 SQL 指令字串、指令集模式與參數集來取得資料表(DataTable)
        /// </summary>
        /// <param name="DBCmdText">SQL 指令字串</param>
        /// <param name="DBCmdParameters">SQL 指令集的參數</param>
        /// <param name="DBCmdType">SQL 指令集模式,預設值為 Text</param>
        /// <remarks>依 SQL 命令物件與參數集,取回查詢資料並存入資料表。</remarks>
        /// <returns>查詢資料表</returns>
        public DataTable GetDataTable(string DBCmdText, SqlParameterCollection DBCmdParameters, CommandType DBCmdType)
        {
            return GetDataTable(DBCmdText, DBCmdParameters, CommandType.Text, "");
        }

        /// <summary>
        /// 使用 SQL 指令字串、指令集模式與參數集來取得資料表(DataTable),並設定資料表名稱
        /// </summary>
        /// <param name="DBCmdText">SQL 指令字串</param>
        /// <param name="DBCmdParameters">SQL 指令集的參數</param>
        /// <param name="DBCmdType">SQL 指令集模式,預設值為 Text</param>
        /// <param name="TableName">定義資料表名稱</param>
        /// <remarks>依 SQL 命令物件與參數集,取回查詢資料並存入資料表。</remarks>
        /// <returns>查詢資料表</returns>
        public DataTable GetDataTable(string DBCmdText, SqlParameterCollection DBCmdParameters, CommandType DBCmdType, string TableName)
        {
            SqlCommand cmdSQL = new SqlCommand();
            DataTable tmpDataTable = new DataTable();
            try
            {
                cmdSQL = DBCommand(DBConn(), DBCmdText, DBCmdParameters, DBCmdType);
                tmpDataTable = GetDataTable(cmdSQL, TableName);
            }
            catch { }
            cmdSQL.Dispose();
            return tmpDataTable;
        }

        /// <summary>
        /// 使用 SQL 指令字串來取得資料表(DataTable)
        /// </summary>
        /// <param name="DBCmdText">SQL 指令字串</param>
        /// <remarks>依 SQL 查詢指令字串,取回查詢資料並存入資料表。</remarks>
        /// <returns>查詢資料表</returns>
        public DataTable GetDataTable(string DBCmdText)
        {
            return GetDataTable(DBCmdText, CommandType.Text, "");
        }

        /// <summary>
        /// 使用 SQL 指令字串與指令集模式,來取得資料表(DataTable)
        /// </summary>
        /// <param name="DBCmdText">SQL 指令字串</param>
        /// <param name="DBCmdType">SQL 指令集模式</param>
        /// <remarks>依 SQL 查詢指令字串,取回查詢資料並存入資料表。</remarks>
        /// <returns>查詢資料表</returns>
        public DataTable GetDataTable(string DBCmdText, CommandType DBCmdType)
        {
            return GetDataTable(DBCmdText, DBCmdType, "");
        }

        /// <summary>
        /// 使用 SQL 指令字串與指令集模式,來取得資料表(DataTable),並設定資料表名稱
        /// </summary>
        /// <param name="DBCmdText">SQL 指令字串</param>
        /// <param name="DBCmdType">SQL 指令集模式</param>
        /// <param name="TableName">定義資料表名稱</param>
        /// <remarks>依 SQL 查詢指令字串,取回查詢資料並存入資料表。</remarks>
        /// <returns>查詢資料表</returns>
        public DataTable GetDataTable(string DBCmdText, CommandType DBCmdType, string TableName)
        {
            SqlCommand cmdSQL = new SqlCommand();
            DataTable tmpDataTable = new DataTable();
            try
            {
                cmdSQL = DBCommand(DBConn(), DBCmdText, DBCmdType);
                tmpDataTable = GetDataTable(cmdSQL, TableName);
            }
            catch { }
            cmdSQL.Dispose();
            return tmpDataTable;
        }
        #endregion

        #region 執行 SQL 指令
        /// <summary>
        /// 使用 SQL 指令字串來執行 SQL 命令
        /// </summary>
        /// <param name="DBCmdText">SQL 指令字串</param>
        /// <remarks>執行所指定的 SQL 命令字串。</remarks>
        /// <returns>影響的資料行數量</returns>
        public int ExecuteCMD(string DBCmdText)
        {
            SqlCommand cmdSQL = new SqlCommand();
            int intEffect = 0;
            try
            {
                cmdSQL = DBCommand(DBConn(), DBCmdText);
                intEffect = cmdSQL.ExecuteNonQuery();
            }
            catch
            {
                intEffect = -1;
            }
            cmdSQL.Dispose();
            return intEffect;
        }

        /// <summary>
        /// 使用 SQL 指令字串來執行 SQL 命令,並且使用交易模式
        /// </summary>
        /// <param name="DBCmdText">SQL 指令字串</param>
        /// <remarks>執行所指定的 SQL 命令字串。</remarks>
        /// <returns>影響的資料行數量</returns>
        public bool ExecuteTransCMD(string DBCmdText)
        {
            SqlCommand cmdSQL = new SqlCommand();
            SqlTransaction traSQL;

            try
            {
                cmdSQL = DBCommand(DBConn(), DBCmdText, out traSQL);

                try
                {
                    cmdSQL.ExecuteNonQuery();
                    traSQL.Commit();
                }
                catch
                {
                    traSQL.Rollback();
                    throw new Exception();
                }
                finally
                {
                    traSQL.Dispose();
                    cmdSQL.Dispose();
                }
                return true;
            }
            catch
            {
                cmdSQL.Dispose();
                return false;
            }
        }

        /// <summary>
        /// 使用 SQL 指令字串與參數集,來執行 SQL 命令
        /// </summary>
        /// <param name="DBCmdText">SQL 指令字串</param>
        /// <param name="DBCmdParameters">SQL 指令集的參數</param>
        /// <remarks>執行所指定的 SQL 命令字串與指令參數集。</remarks>
        /// <returns>影響的資料行數量</returns>
        public int ExecuteCMD(string DBCmdText, SqlParameterCollection DBCmdParameters)
        {
            SqlCommand cmdSQL = new SqlCommand();
            int intEffect = 0;
            try
            {
                cmdSQL = DBCommand(DBConn(), DBCmdText, DBCmdParameters);
                intEffect = cmdSQL.ExecuteNonQuery();
            }
            catch
            {
                intEffect = -1;
            }
            cmdSQL.Dispose();
            return intEffect;
        }
        #endregion

        #region 取回單一查詢值
        /// <summary>
        /// 使用 SQL 指令字串來取回單一回傳值
        /// </summary>
        /// <param name="DBCmdText">SQL 指令字串</param>
        /// <remarks>執行所指定的 SQL 命令字串,取回查詢結果第一行第一個欄位值。</remarks>
        /// <returns>查詢結果資料物件</returns>
        public object GetSingleValue(string DBCmdText)
        {
            SqlCommand cmdSQL = new SqlCommand();
            object objReturn = new object();
            try
            {
                cmdSQL = DBCommand(DBConn(), DBCmdText);
                objReturn = cmdSQL.ExecuteScalar();
            }
            catch
            {
                objReturn = null;
            }
            cmdSQL.Dispose();
            return objReturn;
        }

        /// <summary>
        /// 使用 SQL 指令字串與參數集,來取回單一回傳值
        /// </summary>
        /// <param name="DBCmdText">SQL 指令字串</param>
        /// <param name="DBCmdParameters">SQL 指令集的參數</param>
        /// <remarks>執行所指定的 SQL 命令字串與指令參數集,取回查詢結果第一行第一個欄位值。</remarks>
        /// <returns>查詢結果資料物件</returns>
        public object GetSingleValue(string DBCmdText, SqlParameterCollection DBCmdParameters)
        {
            SqlCommand cmdSQL = new SqlCommand();
            object objReturn = new object();
            try
            {
                cmdSQL = DBCommand(DBConn(), DBCmdText, DBCmdParameters);
                objReturn = cmdSQL.ExecuteScalar();
            }
            catch
            {
                objReturn = null;
            }
            cmdSQL.Dispose();
            return objReturn;
        }
        #endregion

        #region 取回第一行的所有資料
        /// <summary>
        /// 使用 SQL 指令字串,取回符合條件的第一筆資料
        /// </summary>
        /// <param name="DBCmdText">SQL 指令字串</param>
        /// <remarks>依指定的 SQL 命令字串,取回查詢結果的第一行資料。</remarks>
        /// <returns>查詢結果的第一行資料</returns>
        public Hashtable GetFirstRowData(string DBCmdText)
        {
            SqlCommand cmdSQL = new SqlCommand();
            Hashtable htReturn = new Hashtable();
            try
            {
                cmdSQL = DBCommand(DBConn(), DBCmdText);
                htReturn = GetFirstRowData(cmdSQL);
            }
            catch { }
            cmdSQL.Dispose();
            return htReturn;
        }

        /// <summary>
        /// 使用 SQL 指令字串與參數集,取回符合條件的第一筆資料
        /// </summary>
        /// <param name="DBCmdText">SQL 指令字串</param>
        /// <param name="DBCmdParameters">SQL 指令集的參數</param>
        /// <remarks>依指定的 SQL 命令字串與指令參數集,取回查詢結果的第一行資料。</remarks>
        /// <returns>查詢結果的第一行資料</returns>
        public Hashtable GetFirstRowData(string DBCmdText, SqlParameterCollection DBCmdParameters)
        {
            SqlCommand cmdSQL = new SqlCommand();
            Hashtable objReturn = new Hashtable();
            try
            {
                cmdSQL = DBCommand(DBConn(), DBCmdText, DBCmdParameters);
                objReturn = GetFirstRowData(cmdSQL);
            }
            catch { }
            cmdSQL.Dispose();
            return objReturn;
        }

        /// <summary>
        /// 使用 SQL 命令物件,取回符合條件的第一筆資料
        /// </summary>
        /// <param name="DBCommands">SQL 命令物件</param>
        /// <remarks>依指定的 SQL 命令物件,取回查詢結果的第一行資料。</remarks>
        /// <returns>查詢結果的第一行資料</returns>
        public Hashtable GetFirstRowData(SqlCommand DBCommands)
        {
            SqlDataReader drSQL;
            Hashtable objReturn = new Hashtable();
            try
            {
                drSQL = DBCommands.ExecuteReader();
                if (drSQL.HasRows)
                {
                    drSQL.Read();
                    for (int i = 0; i < drSQL.FieldCount; i++)
                    {
                        objReturn.Add(drSQL.GetName(i), drSQL[i]);
                    }
                }
                else
                {
                    objReturn = null;
                }
                drSQL.Dispose();
            }
            catch
            {
                objReturn = null;
            }
            return objReturn;
        }
        #endregion

        /// <summary>
        /// 釋放所使用的資源
        /// </summary>
        /// <remarks>釋放類別所使用的資源。</remarks>
        public void Dispose()
        {
            System.GC.Collect();
        }
    }
}

 


程式是運氣與直覺堆砌而成的奇蹟。
若不具備這兩者,不可能以這樣的工時實現這樣的規格。
修改規格是對奇蹟吐槽的褻瀆行為。
而追加修改則是相信奇蹟還會重現的魯莽行動。