using Dapper; using System; using System.Collections.Generic; using System.Data; using System.Data.SqlClient; using System.Linq; using System.Web; namespace WebAPI.Dapper { public class SqlHelper { private readonly string _connStr; public SqlHelper(string connStr) { _connStr = connStr; } IDbConnection GetConnection() { IDbConnection db = new SqlConnection(_connStr); db.Open(); return db; } /// /// 获取一个值,param可以是SQL参数也可以是匿名对象 /// /// /// /// /// /// /// /// public T GetValue(string sql, object param = null, int? commandTimeout = null, CommandType? commandType = null) { using (var connection = GetConnection()) { return connection.ExecuteScalar(sql, param, null, commandTimeout, commandType); } } /// /// 事务执行 /// /// /// /// /// /// public int Trans(string sql1, string sql2, object obj1, object obj2) { using (var connection = GetConnection()) { IDbTransaction transaction = connection.BeginTransaction(); try { connection.Execute(sql1, obj1); connection.Execute(sql2, obj2); transaction.Commit(); return 1; } catch (Exception) { transaction.Rollback(); return -1; } } } /// /// 获取一个数据模型实体类,param可以是SQL参数也可以是匿名对象 /// /// /// /// /// /// /// /// public T GetModel(string sql, object param = null, int? commandTimeout = null, CommandType? commandType = null) { using (var connection = GetConnection()) { return connection.QueryFirstOrDefault(sql, param, null, commandTimeout, commandType); } } public int GetExecuteScalar(string sql, object param = null, int? commandTimeout = null, CommandType? commandType = null) { using (var connection = GetConnection()) { var result = connection.ExecuteScalar(sql, param, null, commandTimeout, commandType); return result; } } /// /// 获取符合条件的所有数据模型实体类列表,param可以是SQL参数也可以是匿名对象 /// /// /// /// /// /// /// /// /// public List GetModelList(string sql, object param = null, bool buffered = true, int? commandTimeout = null, CommandType? commandType = null) where T : class { using (var connection = GetConnection()) { return connection.Query(sql, param, null, buffered, commandTimeout, commandType).AsList(); } } /// /// 获取符合条件的所有指定返回结果对象的列表(复合对象【如:1对多,1对1】),param可以是SQL参数也可以是匿名对象 /// /// /// /// /// /// /// /// /// /// /// /// public List GetMultModelList(string sql, Type[] types, Func map, object param = null, bool buffered = true, string splitOn = "Id", int? commandTimeout = null, CommandType? commandType = null) { using (var connection = GetConnection()) { return connection.Query(sql, types, map, param, null, buffered, splitOn, commandTimeout, commandType).AsList(); } } /// /// 执行SQL命令(CRUD),param可以是SQL参数也可以是要添加的实体类 /// /// /// /// /// /// /// public int ExecuteCommand(string sql, object param = null, int? commandTimeout = null, CommandType? commandType = null) { using (var connection = GetConnection()) { int result = connection.Execute(sql, param, null, commandTimeout, commandType); return result; } } public bool ExecuteCommandByTrans(Action action) { using (var connection = GetConnection()) { IDbTransaction transaction = connection.BeginTransaction(); IDbCommand cmd = connection.CreateCommand(); cmd.Transaction = transaction; try { action.Invoke(cmd); transaction.Commit(); return true; } catch { transaction.Rollback(); } } return false; } } }