using Dapper; using System.Collections.Generic; using System.Data; using System.Threading.Tasks; using System.Xml; namespace Mirle.Component.Database { /// /// 資料庫擴充方法類別 /// public static class RelationDatabaseExtensions { /// /// 取得資料庫語法 /// /// 完整檔案路徑 /// 完整子節點名稱 /// 資料庫語法 private static string GetScriptContent(string filePath, string nodeName) { XmlDocument xmlDocument = new XmlDocument(); xmlDocument.Load(filePath); return xmlDocument.SelectSingleNode(nodeName).InnerText.Trim(); } /// /// 取得資料庫語法 /// /// 檔案位置 /// 檔案名稱 /// 完整子節點名稱 /// 資料庫語法 private static string GetScriptContent(string filePath, string fileName, string nodeName) { XmlDocument xmlDocument = new XmlDocument(); xmlDocument.Load($"{filePath}\\{fileName}"); return xmlDocument.SelectSingleNode(nodeName).InnerText.Trim(); } #region === [Read] === /// /// 查詢資料 /// /// 關聯式資料庫連線 /// 資料庫語法 /// 查詢逾時 /// 參數 /// 關聯式資料庫交易 /// 資料集 public static IEnumerable GetData(this IDbConnection conn, string query, object param = null, IDbTransaction trans = null, int commandTimeOut = 300) { return conn.Query(query, param, trans, true, commandTimeOut, CommandType.Text); } /// /// 查詢資料 /// /// 關聯式資料庫連線 /// 完整檔案路徑 /// 完整節點名稱 /// 查詢逾時 /// 參數 /// 關聯式資料庫交易 /// 資料集 public static IEnumerable GetData(this IDbConnection conn, string filePath, string nodeName, object param = null, IDbTransaction trans = null, int commandTimeOut = 300) { string query = GetScriptContent(filePath, nodeName); return conn.Query(query, param, trans, true, commandTimeOut, CommandType.Text); } /// /// 查詢資料表 /// /// 關聯式資料庫連線 /// 檔案路徑 /// 檔案名稱 /// 完整節點名稱 /// 查詢逾時 /// 參數 /// 關聯式資料庫交易 /// 資料集 public static IEnumerable GetData(this IDbConnection conn, string filePath, string fileName, string nodeName, object param = null, IDbTransaction trans = null, int commandTimeOut = 300) { string query = GetScriptContent(filePath, fileName, nodeName); return conn.Query(query, param, trans, true, commandTimeOut, CommandType.Text); } /// /// 查詢資料表 /// /// 資料表類別 /// 關聯式資料庫連線 /// 關聯式資料庫語法 /// 查詢逾時 /// 參數 /// 關聯式資料庫交易 /// 資料集 public static IEnumerable GetData(this IDbConnection conn, string query, object param = null, IDbTransaction trans = null, int commandTimeOut = 300) { return conn.Query(query, param, trans, true, commandTimeOut, CommandType.Text); } /// /// 查詢資料表 /// /// 資料表類別 /// 關聯式資料庫連線 /// 完整檔案路徑 /// 完整節點名稱 /// 查詢逾時 /// 參數 /// 關聯式資料庫交易 /// 資料集 public static IEnumerable GetData(this IDbConnection conn, string filePath, string nodeName, object param = null, IDbTransaction trans = null, int commandTimeOut = 300) { string query = GetScriptContent(filePath, nodeName); return conn.Query(query, param, trans, true, commandTimeOut, CommandType.Text); } /// /// 查詢資料表 /// /// 資料表類別 /// 關聯式資料庫連線 /// 檔案路徑 /// 檔案名稱 /// 完整節點名稱 /// 查詢逾時 /// 參數 /// 關聯式資料庫交易 /// 資料集 public static IEnumerable GetData(this IDbConnection conn, string filePath, string fileName, string nodeName, object param = null, IDbTransaction trans = null, int commandTimeOut = 300) { string query = GetScriptContent(filePath, fileName, nodeName); return conn.Query(query, param, trans, true, commandTimeOut, CommandType.Text); } /// /// 查詢資料表 /// /// 關聯式資料庫連線 /// 關聯式資料庫語法 /// 查詢逾時 /// 參數 /// 關聯式資料庫交易 /// 資料集 public static async Task> GetDataAsync(this IDbConnection conn, string query, object param = null, IDbTransaction trans = null, int commandTimeOut = 300) { IEnumerable dataset = await conn.QueryAsync(query, param, trans, commandTimeOut, CommandType.Text); return dataset; } /// /// 查詢資料表 /// /// 關聯式資料庫連線 /// 完整檔案路徑 /// 完整節點名稱 /// 查詢逾時 /// 參數 /// 關聯式資料庫交易 /// 資料集 public static async Task> GetDataAsync(this IDbConnection conn, string filePath, string nodeName, object param = null, IDbTransaction trans = null, int commandTimeOut = 300) { string query = GetScriptContent(filePath, nodeName); IEnumerable dataset = await conn.QueryAsync(query, param, trans, commandTimeOut, CommandType.Text); return dataset; } /// /// 查詢資料表 /// /// 關聯式資料庫連線 /// 檔案路徑 /// 檔案名稱 /// 節點名稱 /// 查詢逾時 /// 參數 /// 關聯式資料庫交易 /// 資料集 public static async Task> GetDataAsync(this IDbConnection conn, string filePath, string fileName, string nodeName, object param = null, IDbTransaction trans = null, int commandTimeOut = 300) { string query = GetScriptContent(filePath, fileName, nodeName); IEnumerable dataset = await conn.QueryAsync(query, param, trans, commandTimeOut, CommandType.Text); return dataset; } /// /// 查詢資料表 /// /// 資料表類別 /// 關聯式資料庫連線 /// 資料庫語法 /// 查詢逾時 /// 參數 /// 關聯式資料庫交易 /// 資料集 public static async Task> GetDataAsync(this IDbConnection conn, string query, object param = null, IDbTransaction trans = null, int commandTimeOut = 300) { IEnumerable dataset = await conn.QueryAsync(query, param, trans, commandTimeOut, CommandType.Text); return dataset; } /// /// 查詢資料表 /// /// 資料表類別 /// 關聯式資料庫連線 /// 完整檔案路徑 /// 完整節點名稱 /// 查詢逾時 /// 參數 /// 關聯式資料庫交易 /// 資料集 public static async Task> GetDataAsync(this IDbConnection conn, string filePath, string nodeName, object param = null, IDbTransaction trans = null, int commandTimeOut = 300) { string query = GetScriptContent(filePath, nodeName); IEnumerable dataset = await conn.QueryAsync(query, param, trans, commandTimeOut, CommandType.Text); return dataset; } /// /// 查詢資料表 /// /// 資料表類別 /// 關聯式資料庫連線 /// 檔案路徑 /// 檔案名稱 /// 完整節點名稱 /// 查詢逾時 /// 參數 /// 關聯式資料庫交易 /// 資料集 public static async Task> GetDataAsync(this IDbConnection conn, string filePath, string fileName, string nodeName, object param = null, IDbTransaction trans = null, int commandTimeOut = 300) { string query = GetScriptContent(filePath, fileName, nodeName); IEnumerable dataset = await conn.QueryAsync(query, param, trans, commandTimeOut, CommandType.Text); return dataset; } #endregion #region === [Create & Update & Delete] === /// /// 更新資料 /// /// 關聯式資料庫連線 /// 資料庫語法 /// 參數 /// 關聯式資料庫交易 /// 異動筆數 public static int UpdateData(this IDbConnection conn, string query, object param = null, IDbTransaction trans = null) { return conn.Execute(query, param, trans); } /// /// 更新資料 /// /// 關聯式資料庫連線 /// 完整檔案路徑 /// 完整節點名稱 /// 參數 /// 關聯式資料庫交易 /// 異動筆數 public static int UpdateData(this IDbConnection conn, string filePath, string nodeName, object param = null, IDbTransaction trans = null) { string query = GetScriptContent(filePath, nodeName); return conn.Execute(query, param, trans); } /// /// 更新資料 /// /// 關聯式資料庫連線 /// 檔案路徑 /// 檔案名稱 /// 完整節點名稱 /// 參數 /// 關聯式資料庫交易 /// 異動筆數 public static int UpdateData(this IDbConnection conn, string filePath, string fileName, string nodeName, object param = null, IDbTransaction trans = null) { string query = GetScriptContent(filePath, fileName, nodeName); return conn.Execute(query, param, trans); } /// /// 更新資料表資料 /// /// 關聯式資料庫連線 /// 資料庫語法 /// 參數 /// 資料庫交易 /// 異動筆數 public static Task UpdateDataAsync(this IDbConnection conn, string query, object param = null, IDbTransaction trans = null) { return conn.ExecuteAsync(query, param, trans); } /// /// 更新資料 /// /// 關聯式資料庫連線 /// 完整檔案路徑 /// 完整節點名稱 /// 參數 /// 關聯式資料庫交易 /// 異動筆數 public static Task UpdateDataAsync(this IDbConnection conn, string filePath, string nodeName, object param = null, IDbTransaction trans = null) { string query = GetScriptContent(filePath, nodeName); return conn.ExecuteAsync(query, param, trans); } /// /// 更新資料 /// /// 關聯式資料庫連線 /// 檔案路徑 /// 檔案名稱 /// 完整節點名稱 /// 參數 /// 關聯式資料庫交易 /// 異動筆數 public static Task UpdateDataAsync(this IDbConnection conn, string filePath, string fileName, string nodeName, object param = null, IDbTransaction trans = null) { string query = GetScriptContent(filePath, fileName, nodeName); return conn.ExecuteAsync(query, param, trans); } #endregion } }