| 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; | 
|         } | 
|         /// <summary> | 
|         /// 获取一个值,param可以是SQL参数也可以是匿名对象 | 
|         /// </summary> | 
|         /// <typeparam name="T"></typeparam> | 
|         /// <param name="sql"></param> | 
|         /// <param name="param"></param> | 
|         /// <param name="transaction"></param> | 
|         /// <param name="commandTimeout"></param> | 
|         /// <param name="commandType"></param> | 
|         /// <returns></returns> | 
|         public T GetValue<T>(string sql, object param = null, int? commandTimeout = null, CommandType? commandType = null) | 
|         { | 
|             using (var connection = GetConnection()) | 
|             { | 
|                 return connection.ExecuteScalar<T>(sql, param, null, commandTimeout, commandType); | 
|             } | 
|         } | 
|         /// <summary> | 
|         /// 事务执行 | 
|         /// </summary> | 
|         /// <param name="sql1"></param> | 
|         /// <param name="sql2"></param> | 
|         /// <param name="obj1"></param> | 
|         /// <param name="obj2"></param> | 
|         /// <returns></returns> | 
|         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; | 
|                 } | 
|             } | 
|         } | 
|   | 
|         /// <summary> | 
|         /// 获取一个数据模型实体类,param可以是SQL参数也可以是匿名对象 | 
|         /// </summary> | 
|         /// <typeparam name="T"></typeparam> | 
|         /// <param name="sql"></param> | 
|         /// <param name="param"></param> | 
|         /// <param name="transaction"></param> | 
|         /// <param name="commandTimeout"></param> | 
|         /// <param name="commandType"></param> | 
|         /// <returns></returns> | 
|         public T GetModel<T>(string sql, object param = null, int? commandTimeout = null, CommandType? commandType = null) | 
|         { | 
|             using (var connection = GetConnection()) | 
|             { | 
|                 return connection.QueryFirstOrDefault<T>(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<int>(sql, param, null, commandTimeout, commandType); | 
|                 return result; | 
|             } | 
|         } | 
|   | 
|         /// <summary> | 
|         /// 获取符合条件的所有数据模型实体类列表,param可以是SQL参数也可以是匿名对象 | 
|         /// </summary> | 
|         /// <typeparam name="T"></typeparam> | 
|         /// <param name="sql"></param> | 
|         /// <param name="param"></param> | 
|         /// <param name="transaction"></param> | 
|         /// <param name="buffered"></param> | 
|         /// <param name="commandTimeout"></param> | 
|         /// <param name="commandType"></param> | 
|         /// <returns></returns> | 
|         public List<T> GetModelList<T>(string sql, object param = null, bool buffered = true, int? commandTimeout = null, CommandType? commandType = null) where T : class | 
|         { | 
|             using (var connection = GetConnection()) | 
|             { | 
|                 return connection.Query<T>(sql, param, null, buffered, commandTimeout, commandType).AsList(); | 
|             } | 
|         } | 
|   | 
|   | 
|         /// <summary> | 
|         /// 获取符合条件的所有指定返回结果对象的列表(复合对象【如:1对多,1对1】),param可以是SQL参数也可以是匿名对象 | 
|         /// </summary> | 
|         /// <typeparam name="T"></typeparam> | 
|         /// <param name="sql"></param> | 
|         /// <param name="types"></param> | 
|         /// <param name="map"></param> | 
|         /// <param name="param"></param> | 
|         /// <param name="transaction"></param> | 
|         /// <param name="buffered"></param> | 
|         /// <param name="splitOn"></param> | 
|         /// <param name="commandTimeout"></param> | 
|         /// <param name="commandType"></param> | 
|         /// <returns></returns> | 
|   | 
|         public List<T> GetMultModelList<T>(string sql, Type[] types, Func<object[], T> map, object param = null, bool buffered = true, string splitOn = "Id", int? commandTimeout = null, CommandType? commandType = null) | 
|         { | 
|             using (var connection = GetConnection()) | 
|             { | 
|                 return connection.Query<T>(sql, types, map, param, null, buffered, splitOn, commandTimeout, commandType).AsList(); | 
|             } | 
|         } | 
|   | 
|         /// <summary> | 
|         /// 执行SQL命令(CRUD),param可以是SQL参数也可以是要添加的实体类 | 
|         /// </summary> | 
|         /// <param name="sql"></param> | 
|         /// <param name="param"></param> | 
|         /// <param name="transaction"></param> | 
|         /// <param name="commandTimeout"></param> | 
|         /// <param name="commandType"></param> | 
|         /// <returns></returns> | 
|         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<IDbCommand> 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; | 
|         } | 
|     } | 
| } |