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