using Dapper; using Learun.Util; using Newtonsoft.Json.Linq; using System; using System.Collections; using System.Collections.Generic; using System.ComponentModel.DataAnnotations.Schema; using System.Data; using System.Reflection; using System.Text; namespace Learun.DataBase { /// /// 版 本 Learun-ADMS-Ultimate V7.0.0 数字化智慧校园 /// Copyright (c) 2013-2018 北京泉江科技有限公司 /// 创建人:陈彬彬 /// 日 期:2017.03.04 /// 描 述:数据访问扩展 /// public static class SqlHelper { #region 转换扩展类 /// /// 将IDataReader转换为DataTable /// /// 数据读取接口 /// public static DataTable IDataReaderToDataTable(IDataReader reader) { using (reader) { DataTable objDataTable = new DataTable("Table"); int intFieldCount = reader.FieldCount; for (int intCounter = 0; intCounter < intFieldCount; ++intCounter) { objDataTable.Columns.Add(reader.GetName(intCounter).ToLower(), reader.GetFieldType(intCounter)); } objDataTable.BeginLoadData(); object[] objValues = new object[intFieldCount]; while (reader.Read()) { reader.GetValues(objValues); objDataTable.LoadDataRow(objValues, true); } reader.Close(); reader.Dispose(); objDataTable.EndLoadData(); return objDataTable; } } /// /// 获取实体类键值(缓存) /// /// 类型 /// 实体对象 /// public static Hashtable GetPropertyInfo(T entity) { Type type = entity.GetType(); //object CacheEntity = CacheHelper.GetCache("CacheEntity_" + EntityAttribute.GetEntityTable()); object CacheEntity = null; if (CacheEntity == null) { Hashtable ht = new Hashtable(); PropertyInfo[] props = type.GetProperties(); foreach (PropertyInfo prop in props) { bool flag = true; foreach (Attribute attr in prop.GetCustomAttributes(true)) { NotMappedAttribute notMapped = attr as NotMappedAttribute; if (notMapped != null) { flag = false; break; } } if (flag) { string name = prop.Name; object value = prop.GetValue(entity, null); ht[name] = value; } } //CacheHelper.SetCache("CacheEntity_" + EntityAttribute.GetEntityTable(), ht); return ht; } else { return (Hashtable)CacheEntity; } } /// /// 将json对象转化成Dapper可认的参数 /// /// json对象 /// public static DynamicParameters JObjectToParameter(JObject jObject) { try { var args = new DynamicParameters(new { }); foreach (var item in jObject) { args.Add(item.Key.ToString(), item.Value.ToString()); } return args; } catch (Exception) { throw; } } /// /// 将对象转化成Dapper可认的参数 /// /// 对象 /// public static DynamicParameters FieldValueParamToParameter(List fieldValueParams) { try { var args = new DynamicParameters(new { }); foreach (var item in fieldValueParams) { args.Add(item.name, item.value, (DbType)item.type); } return args; } catch (Exception) { throw; } } #endregion #region 分页语句 /// /// sql分页语句 /// /// sql语句 /// 排序字段 /// 排序类型 /// 每页数据条数 /// 页码 /// public static StringBuilder SqlPageSql(string strSql, string orderField, bool isAsc, int pageSize, int pageIndex) { StringBuilder sb = new StringBuilder(); if (pageIndex == 0) { pageIndex = 1; } int num = (pageIndex - 1) * pageSize; int num1 = (pageIndex) * pageSize; string OrderBy = ""; if (!string.IsNullOrEmpty(orderField)) { if (orderField.ToUpper().IndexOf("ASC") + orderField.ToUpper().IndexOf("DESC") > 0) { OrderBy = " Order By " + orderField; } else { OrderBy = " Order By " + orderField + " " + (isAsc ? "ASC" : "DESC"); } } else { OrderBy = "order by (select 0)"; } sb.Append("Select * From (Select ROW_NUMBER() Over (" + OrderBy + ")"); sb.Append(" As rowNum, * From (" + strSql + ") T ) As N Where rowNum > " + num + " And rowNum <= " + num1 + ""); return sb; } /// /// oracle分页语句 /// /// sql语句 /// 排序字段 /// 排序类型 /// 每页数据条数 /// 页码 /// public static StringBuilder OraclePageSql(string strSql, string orderField, bool isAsc, int pageSize, int pageIndex) { StringBuilder sb = new StringBuilder(); if (pageIndex == 0) { pageIndex = 1; } int num = (pageIndex - 1) * pageSize; int num1 = (pageIndex) * pageSize; string OrderBy = ""; if (!string.IsNullOrEmpty(orderField)) { if (orderField.ToUpper().IndexOf("ASC") + orderField.ToUpper().IndexOf("DESC") > 0) { OrderBy = " Order By " + orderField; } else { OrderBy = " Order By " + orderField + " " + (isAsc ? "ASC" : "DESC"); } } sb.Append("Select * From (Select ROWNUM lrrn,"); sb.Append(" T.* From (" + strSql + OrderBy + ") T ) N Where lrrn > " + num + " And lrrn <= " + num1 + ""); return sb; } /// /// mysql分页语句 /// /// sql语句 /// 排序字段 /// 排序类型 /// 每页数据条数 /// 页码 /// public static StringBuilder MySqlPageSql(string strSql, string orderField, bool isAsc, int pageSize, int pageIndex) { StringBuilder sb = new StringBuilder(); if (pageIndex == 0) { pageIndex = 1; } int num = (pageIndex - 1) * pageSize; string OrderBy = ""; if (!string.IsNullOrEmpty(orderField)) { if (orderField.ToUpper().IndexOf("ASC") + orderField.ToUpper().IndexOf("DESC") > 0) { OrderBy = " Order By " + orderField; } else { OrderBy = " Order By " + orderField + " " + (isAsc ? "ASC" : "DESC"); } } sb.Append(strSql + OrderBy); sb.Append(" limit " + num + "," + pageSize + ""); return sb; } #endregion } }