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
}
}