using Dapper; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Configuration; using System.Data; using System.Data.SqlClient; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Web; using VueWebApi.Models; namespace VueWebApi.Tools { public class DapperHelper { /// /// 创建数据库连接对象Sqlserver /// /// public static IDbConnection sqlConnection() { //string sqlServerConnectString = "server=***;database=***;User=***;password=***;Connect Timeout=10000"; string sqlServerConnectString = ConfigurationManager.AppSettings["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 { 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查询返回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 sqlList) { bool result; IDbTransaction tranction = null; using (IDbConnection conn = sqlConnection()) { try { tranction = conn.BeginTransaction(); for (int i = 0; i < sqlList.Count; i++) { conn.Execute(sqlList[i].GetType().GetProperty("str").GetValue(sqlList[i], null).ToString(), sqlList[i].GetType().GetProperty("parm").GetValue(sqlList[i], null), tranction); } tranction.Commit(); result = true; } catch (Exception ex) { //创建日志记录组件实例 LogHelper.WriteLog(ex); result = false; tranction.Rollback(); throw ex; } finally { conn.Dispose(); conn.Close(); } return result; } } /// /// 增加,删除,修改使用的 事务方法 Sqllist为依次执行 /// /// /// public static int DoTransactionCont(List sqlList) { int result = 0; IDbTransaction tranction = null; using (IDbConnection conn = sqlConnection()) { try { tranction = conn.BeginTransaction(); for (int i = 0; i < sqlList.Count; i++) { result += conn.Execute(sqlList[i].GetType().GetProperty("str").GetValue(sqlList[i], null).ToString(), sqlList[i].GetType().GetProperty("parm").GetValue(sqlList[i], null), tranction); } tranction.Commit(); } catch (Exception ex) { //创建日志记录组件实例 LogHelper.WriteLog(ex); tranction.Rollback(); throw ex; } finally { conn.Dispose(); conn.Close(); } return result; } } /// /// Dapper插入 返回自增主键Id(备份) /// /// /// /// 待插入数据的表名 /// public static int insertReturnId0(string sql, Object parameter, String tableName) { int result = 0; using (IDbConnection conn = sqlConnection()) { try { result = conn.Execute(sql, parameter); if (result != 0) { result = conn.Query("select ident_current(@table)", new { table = tableName }).Single(); } } catch (Exception ex) { //创建日志记录组件实例 LogHelper.WriteLog(ex); throw ex; } finally { conn.Dispose(); conn.Close(); } } return result; } /// /// Dapper 返回自增主键当前数据表最大Id /// /// 待插入数据的表名 /// public static int insertReturnId(String tableName) { int result = 0; using (IDbConnection conn = sqlConnection()) { try { if (result == 0) { result = conn.Query("select ident_current(@table)", new { table = tableName }).Single(); } } catch (Exception ex) { //创建日志记录组件实例 LogHelper.WriteLog(ex); throw ex; } finally { conn.Dispose(); conn.Close(); } } return result; } } }