using SqlSugar; using System.Data; using System.Data.Common; using System.Text; using Wood.Entity; using Wood.Util; namespace Wood.Data.Repository { /// /// 创建人:admin /// 日 期:2018.10.18 /// 描 述:定义仓储模型中的数据标准操作接口 /// public class SqlSugarRepository : SimpleClient where T : class, new() { #region 构造函数 public SqlSugarRepository(ISqlSugarClient sqlSugarClient) { base.Context = sqlSugarClient; } #endregion #region 执行 SQL 语句 public async Task ExecuteBySql(string strSql) { return await Context.Ado.ExecuteCommandAsync(strSql); } public async Task ExecuteBySql(string strSql, params DbParameter[] dbParameter) { return await Context.Ado.ExecuteCommandAsync(strSql, dbParameter); } public async Task ExecuteByProc(string procName) { return await Context.Ado.UseStoredProcedure().ExecuteCommandAsync(procName); } public async Task ExecuteByProc(string procName, params DbParameter[] dbParameter) { return await Context.Ado.UseStoredProcedure().ExecuteCommandAsync(procName, dbParameter); } #endregion #region 数据源 查询 public async Task FindTable(string strSql) { return await Context.Ado.GetDataTableAsync(strSql); } public async Task FindTable(string strSql, DbParameter[] dbParameter) { return await Context.Ado.GetDataTableAsync(strSql, dbParameter); } public async Task FindTable(string strSql, Pagination pagination) { var data = await FindTable(strSql, pagination.Sort, pagination.PageSize, pagination.PageIndex); pagination.TotalCount = data.total; return data.Item2; } public async Task FindTable(string strSql, DbParameter[] dbParameter, Pagination pagination) { var data = await FindTable(strSql, dbParameter, pagination.Sort, pagination.PageSize, pagination.PageIndex); pagination.TotalCount = data.total; return data.Item2; } private async Task<(int total, DataTable)> FindTable(string strSql, string sort, int pageSize, int pageIndex) { return await FindTable(strSql, null, sort, pageSize, pageIndex); } private async Task<(int total, DataTable)> FindTable(string strSql, DbParameter[]? dbParameter, string sort, int pageSize, int pageIndex) { StringBuilder sb = new StringBuilder(); if (Context.CurrentConnectionConfig.DbType == SqlSugar.DbType.MySql) sb.Append(DatabasePageExtension.MySqlPageSql(strSql, sort, pageSize, pageIndex)); else if (Context.CurrentConnectionConfig.DbType == SqlSugar.DbType.Oracle) sb.Append(DatabasePageExtension.OraclePageSql(strSql, sort, pageSize, pageIndex)); else if (Context.CurrentConnectionConfig.DbType == SqlSugar.DbType.SqlServer) sb.Append(DatabasePageExtension.SqlServerPageSql(strSql, sort, pageSize, pageIndex)); else sb.Append(DatabasePageExtension.MySqlPageSql(strSql, sort, pageSize, pageIndex)); object tempTotal = await Context.Ado.ExecuteCommandAsync("SELECT COUNT(1) FROM (" + strSql + ") T", dbParameter); int total = tempTotal?.ToString()?.ToInt()??0; if (total > 0) { var table = await Context.Ado.GetDataTableAsync(sb.ToString(), dbParameter); return (total, table); } else return (total, new DataTable()); } #endregion } }