using Dapper;
using Microsoft.AspNetCore.Http;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using VueWebCoreApi.DLL.BLL;
using VueWebCoreApi.Models;
namespace VueWebCoreApi.Tools
{
public class DapperHelper
{
///
/// 创建数据库连接对象Sqlserver
///
///
public static IDbConnection sqlConnection()
{
//string sqlServerConnectString = "server=***;database=***;User=***;password=***;Connect Timeout=10000";
string sqlServerConnectString = AppSetting.GetAppSetting("DBServer");
//获取数据库连接
IDbConnection connection = new SqlConnection(sqlServerConnectString);
connection.Open();
return connection;
}
///
/// Dapper查询返回List
///
/// 需要返回的对象类型
/// Sql语句
///
///
public static List select(string sql, Object parm) where T : new()
{
List list = null;
using (IDbConnection conn = sqlConnection())
{
try
{
//用户操作记录写入数据表
//Log4net.LogUtil.SaveMessage("PC", "操作了xxxxx", "api/Login/LoginSave", ConfigurationManager.AppSettings["FileIP"], "9999", 1);
list = conn.Query(sql, parm).ToList();
}
catch (Exception ex)
{
//创建日志记录组件实例
LogHelper.WriteLog(ex);
throw ex;
}
finally
{
conn.Dispose();
conn.Close();
}
}
return list;
}
///
/// Dapper查询返回List字典对象 无需手动Wapper对象了
///
///
///
///
public static List> selectToDict(string sql, Object parm)
{
List> result = null;
using (IDbConnection conn = sqlConnection())
{
try
{
var menus = conn.Query(sql, parm).ToList();
result = JsonConvert.DeserializeObject>>(JsonConvert.SerializeObject(menus));
}
catch (Exception ex)
{
//创建日志记录组件实例
LogHelper.WriteLog(ex);
throw ex;
}
finally
{
conn.Dispose();
conn.Close();
}
}
return result;
}
///
/// Dapper查询返回对象非List集合
///
///
///
///
///
public static T selectToObject(string sql, Object parm) where T : new()
{
T t = new T();
//sql语句
using (IDbConnection conn = sqlConnection())
{
try
{
t = conn.Query(sql, parm).Single();
}
catch (Exception ex)
{
//创建日志记录组件实例
LogHelper.WriteLog(ex);
throw ex;
}
finally
{
conn.Dispose();
conn.Close();
}
}
return t;
}
///
/// dapper通用分页函数
///
/// 泛型集合实体类
/// 查询语句
/// 排序(字段 DESC/ASC)
/// 当前页
/// 当前页显示条数
/// 结果集总数
///
public static IEnumerable GetPageList(string sql, Object parm, string orderBy, string sort, int pageIndex, int pageSize, out int total)
{
//int skip = 1;
//if (pageIndex > 0)
//{
// skip = (pageIndex - 1) * pageSize + 1;
//}
StringBuilder sb = new StringBuilder();
sb.AppendFormat("SELECT COUNT(1) FROM ({0}) AS Result;", sql);
sb.AppendFormat(@"SELECT *
FROM(SELECT *,ROW_NUMBER() OVER(ORDER BY {1} {2}) AS RowNum
FROM ({0}) AS Temp) AS Result
WHERE RowNum >= {3} AND RowNum <= {4}
ORDER BY {1} {2}", sql, orderBy, sort, pageIndex, pageSize); //skip, pageIndex * pageSize
using (IDbConnection conn = sqlConnection())
{
try
{
using (var reader = conn.QueryMultiple(sb.ToString(), parm))
{
total = reader.ReadFirst();
return reader.Read();
}
}
catch (Exception ex)
{
//创建日志记录组件实例
LogHelper.WriteLog(ex);
throw ex;
}
finally
{
conn.Dispose();
conn.Close();
}
}
}
///
/// dapper通用分页函数
///
/// 泛型集合实体类
///with函数语句
/// 查询语句
/// 排序(字段 DESC/ASC)
/// 当前页
/// 当前页显示条数
/// 结果集总数
///
public static IEnumerable GetPagedDataWith(string withsql, string sql, Object parm, string orderBy, string sort, int pageIndex, int pageSize, out int total)
{
//int skip = 1;
//if (pageIndex > 0)
//{
// skip = (pageIndex - 1) * pageSize + 1;
//}
StringBuilder sb = new StringBuilder();
sb.AppendFormat("{0} SELECT COUNT(1) FROM ({1}) AS Result;",withsql, sql);
sb.AppendFormat(@"{0} SELECT *
FROM(SELECT *,ROW_NUMBER() OVER(ORDER BY {2} {3}) AS RowNum
FROM ({1}) AS Temp) AS Result
WHERE RowNum >= {4} AND RowNum <= {5}
ORDER BY {2} {3}",withsql, sql, orderBy, sort, pageIndex, pageSize); //skip, pageIndex * pageSize
using (IDbConnection conn = sqlConnection())
{
try
{
using (var reader = conn.QueryMultiple(sb.ToString(), parm))
{
total = reader.ReadFirst();
return reader.Read();
}
}
catch (Exception ex)
{
//创建日志记录组件实例
LogHelper.WriteLog(ex);
throw ex;
}
finally
{
conn.Dispose();
conn.Close();
}
}
}
///
/// WITH分页
///
/// 泛型集合实体类
/// 表名
/// 子级字段
/// 父级字段
/// 查询条件
/// 查询参数
/// 排序字段
/// 排序规则
/// 页码
/// 每页显示条数
///
public static IEnumerable GetPagedData(string tableName, string torg_code, string parent_id, string condition, Object parm, string prop, string order, int pageSize, int pageNumber, out int total)
{
using (IDbConnection conn = sqlConnection())
{
try
{
// 查询总记录数
string countQuery = $@"WITH CTE AS (
SELECT *
FROM {tableName}
WHERE {condition}
UNION ALL
select o.*
from {tableName} o
JOIN CTE c ON o.{torg_code} = c.{parent_id}
)
SELECT DISTINCT * FROM CTE";
int totalRecords = conn.ExecuteScalar(countQuery, parm);
// 计算总页数
int totalPages = (int)Math.Ceiling((double)totalRecords / pageSize);
// 计算分页的起始行号
int startRow = (pageNumber - 1) * pageSize + 1;
// 计算分页的结束行号
int endRow = pageNumber * pageSize;
// 分页查询
string query = $@"WITH CTE AS (
SELECT *
FROM {tableName}
WHERE {condition}
UNION ALL
select o.*
from {tableName} o
JOIN CTE c ON o.{torg_code} = c.{parent_id}
)
SELECT * FROM(
SELECT ROW_NUMBER() OVER (ORDER BY {prop} {order}) AS RowNum,*
FROM (
SELECT DISTINCT *
from CTE
) AS subquery) AS AA WHERE RowNum >= {startRow} AND RowNum <={endRow}";
total = totalRecords;
return conn.Query(query, parm);
}
catch (Exception ex)
{
//创建日志记录组件实例
LogHelper.WriteLog(ex);
throw ex;
}
finally
{
conn.Dispose();
conn.Close();
}
}
}
///
/// Dapper查询返回datatable数据(带参数)
///
///
///
///
public static DataTable selectdata(string sql, Object parm)
{
//sql语句
using (IDbConnection conn = sqlConnection())
{
try
{
DataTable table = new DataTable();
var data = conn.ExecuteReader(sql, parm);
table.Load(data);
return table;
}
catch (Exception ex)
{
//创建日志记录组件实例
LogHelper.WriteLog(ex);
throw ex;
}
finally
{
conn.Dispose();
conn.Close();
}
}
}
///
/// Dapper查询返回datatable数据(带参数)
///
///
///
///
public static DataTable selectlist(string sql, Object parm)
{
//sql语句
using (IDbConnection conn = sqlConnection())
{
try
{
DataTable table = new DataTable();
var data = conn.ExecuteReader(sql, parm);
table.Load(data);
return table;
}
catch (Exception ex)
{
//创建日志记录组件实例
LogHelper.WriteLog(ex);
throw ex;
}
finally
{
conn.Dispose();
conn.Close();
}
}
}
///
/// Dapper查询返回datatable数据(不带参数)
///
///
///
public static DataTable selecttable(string sql)
{
//sql语句
using (IDbConnection conn = sqlConnection())
{
try
{
DataTable table = new DataTable();
var data = conn.ExecuteReader(sql);
table.Load(data);
return table;
}
catch (Exception ex)
{
//创建日志记录组件实例
//LogHelper.WriteLog(ex);
throw ex;
}
finally
{
conn.Dispose();
conn.Close();
}
}
}
///
/// Dapper执行存储过程返回datatable数据(带参数)
///
/// 存储过程名
/// 参数
///
public static DataTable selectProcedure(string sql, Object parm)
{
//sql语句
using (IDbConnection conn = sqlConnection())
{
try
{
DataTable table = new DataTable();
//var data = conn.ExecuteReader(sql, parm);
var res = conn.ExecuteReader(sql, parm, commandType: CommandType.StoredProcedure);//sql 存储过程
table.Load(res);
return table;
}
catch (Exception ex)
{
//创建日志记录组件实例
LogHelper.WriteLog(ex);
throw ex;
}
finally
{
conn.Dispose();
conn.Close();
}
}
}
///
/// Dapper执行存储过程返回datatable数据(带参数)
///
/// 存储过程名
/// 参数
///
public static bool IsProcedure(string sql, Object parm)
{
bool result;
//sql语句
using (IDbConnection conn = sqlConnection())
{
try
{
DataTable table = new DataTable();
//var data = conn.ExecuteReader(sql, parm);
var res = conn.ExecuteReader(sql, parm, commandType: CommandType.StoredProcedure);//sql 存储过程
result = true;
}
catch (Exception ex)
{
//创建日志记录组件实例
LogHelper.WriteLog(ex);
result = false;
throw ex;
}
finally
{
conn.Dispose();
conn.Close();
}
return result;
}
}
///
/// Dapper执行存储过程返回datatable数据(不带参数)
///
/// 存储过程名
///
public static bool IsProcedureNo(string sql)
{
bool result;
//sql语句
using (IDbConnection conn = sqlConnection())
{
try
{
DataTable table = new DataTable();
//var data = conn.ExecuteReader(sql, parm);
var res = conn.ExecuteReader(sql);//sql 存储过程
result = true;
}
catch (Exception ex)
{
//创建日志记录组件实例
LogHelper.WriteLog(ex);
result = false;
throw ex;
}
finally
{
conn.Dispose();
conn.Close();
}
return result;
}
}
///
/// Dapper查询返回数据条数
///
///
///
///
public static int selectcount(string sql, Object parm)
{
//sql语句
int result = 0;
using (IDbConnection conn = sqlConnection())
{
try
{
result = conn.Query(sql, parm).Count();
}
catch (Exception ex)
{
//创建日志记录组件实例
LogHelper.WriteLog(ex);
throw ex;
}
finally
{
conn.Dispose();
conn.Close();
}
return result;
}
}
///
/// Dapper增删改
///
///
///
///
public static int SQL(string sql, Object parametere)
{
//sql语句
int result = 0;
using (IDbConnection conn = sqlConnection())
{
try
{
result = conn.Execute(sql, parametere);
}
catch (Exception ex)
{
//创建日志记录组件实例
LogHelper.WriteLog(ex);
throw ex;
}
finally
{
conn.Dispose();
conn.Close();
}
}
return result;
}
///
/// 增加,删除,修改使用的 事务方法 Sqllist为依次执行
///
///
///
public static bool DoTransaction(List