zoukankan      html  css  js  c++  java
  • C# 访问 SQL SERVER 数据库帮助类

    写一个属于自己的数据库帮助类,温故而知新~~

    数据库操作核心部分:

      1     /// <summary>
      2     /// 数据库操作基类
      3     /// </summary>
      4     public class DbServiceBase : IDisposable
      5     {
      6         #region 私有字段
      7 
      8         /// <summary>
      9         /// 自动释放数据库连接
     10         /// </summary>
     11         private bool AutoClearConnection = true;
     12 
     13         /// <summary>
     14         /// 数据库连接字符串
     15         /// </summary>
     16         private string ConnectionStrings;
     17 
     18         /// <summary>
     19         /// 数据库连接对象
     20         /// </summary>
     21         private SqlConnection conn = null;
     22 
     23         /// <summary>
     24         /// 事务对象
     25         /// </summary>
     26         private SqlTransaction tran = null;
     27 
     28         #endregion
     29 
     30         #region 私有方法
     31 
     32         /// <summary>
     33         /// 创建数据库连接
     34         /// </summary>
     35         /// <returns></returns>
     36         private void CreateConnection()
     37         {
     38             if (conn.IsNull())
     39             {
     40                 conn = new SqlConnection(ConnectionStrings);
     41             }
     42             if (conn.State != ConnectionState.Open)
     43             {
     44                 conn.Open();
     45             }
     46         }
     47 
     48         /// <summary>
     49         /// 释放数据库连接
     50         /// </summary>
     51         private void ClearConnection()
     52         {
     53             if (!tran.IsNull())
     54             {
     55                 tran = null;
     56             }
     57             if (!conn.IsNull())
     58             {
     59                 SqlConnection.ClearPool(conn); //用于清除每次的连接,防止已经进行的数据库连接进入sleeping而导致连接用户数增加
     60                 conn.Close();
     61                 conn.Dispose();
     62                 conn = null;
     63             }
     64         }
     65 
     66         /// <summary>
     67         /// 获得表名
     68         /// </summary>
     69         /// <typeparam name="T">类名</typeparam>
     70         /// <returns>表名</returns>
     71         private string GetTableName<T>() where T : class
     72         {
     73             string tableName = typeof(T).Name;
     74             return tableName;
     75         }
     76 
     77         /// <summary>
     78         /// 获得 where sql 语句
     79         /// </summary>
     80         /// <typeparam name="T">类名</typeparam>
     81         /// <param name="where">筛选条件</param>
     82         /// <param name="arrListSqlPara">SqlParameter参数</param>
     83         /// <returns>sql语句</returns>
     84         private string GetWhereSql<T>(Expression<Func<T, bool>> where, ref ArrayList arrListSqlPara) where T : class
     85         {
     86             List<SqlParaModel> listSqlParaModel = new List<SqlParaModel>();
     87             string whereSql = where == null ? "" : LambdaToSqlHelper.GetWhereSql(where, listSqlParaModel);
     88             for (var i = 0; i < listSqlParaModel.Count; i++)
     89             {
     90                 var key = listSqlParaModel[i].name;
     91                 var val = listSqlParaModel[i].value;
     92                 arrListSqlPara.Add(new SqlParameter("@" + key, val));
     93             }
     94             return whereSql;
     95         }
     96 
     97         /// <summary>
     98         /// 获得查询字段列表
     99         /// </summary>
    100         /// <typeparam name="T">类名</typeparam>
    101         /// <param name="field">查询字段</param>
    102         /// <returns>查询字段</returns>
    103         private string GetQueryField<T>(Expression<Func<T, object>> field) where T : class
    104         {
    105             string queryField = field == null ? "*" : LambdaToSqlHelper.GetQueryField(field);
    106             return queryField;
    107         }
    108 
    109         /// <summary>
    110         /// 获得 order sql 语句
    111         /// </summary>
    112         /// <typeparam name="T">类名</typeparam>
    113         /// <param name="orderBy">排序</param>
    114         /// <returns>sql语句</returns>
    115         private string GetOrderBySql<T>(Expression<Func<IQueryable<T>, IOrderedQueryable<T>>> orderBy) where T : class
    116         {
    117             string orderBySql = orderBy == null ? "" : LambdaToSqlHelper.GetOrderBySql(orderBy);
    118             return orderBySql;
    119         }
    120 
    121         /// <summary>
    122         /// 获得 insert sql 语句
    123         /// </summary>
    124         /// <typeparam name="T">类名</typeparam>
    125         /// <param name="model">对象实例</param>
    126         /// <param name="arrSqlPara">SqlParameter参数</param>
    127         /// <returns>sql语句</returns>
    128         private string GetCreateSql<T>(object model, ref SqlParameter[] arrSqlPara) where T : class
    129         {
    130             string resultSql = string.Empty;
    131             ArrayList arrListSqlPara = new ArrayList();
    132             StringBuilder sbInsColName = new StringBuilder();
    133             StringBuilder sbInsColVal = new StringBuilder();
    134             string tableName = GetTableName<T>();
    135             var dic = ExtendMethod.Foreach(model);
    136             foreach (var item in dic)
    137             {
    138                 var val = item.Value;
    139                 if (!val.IsNull())
    140                 {
    141                     var key = item.Key;
    142                     sbInsColName.Append(string.Format("{0},", key));
    143                     sbInsColVal.Append(string.Format("@{0},", key));
    144                     arrListSqlPara.Add(new SqlParameter("@" + key, val));
    145                 }
    146             }
    147             sbInsColName.Remove(sbInsColName.Length - 1, 1);
    148             sbInsColVal.Remove(sbInsColVal.Length - 1, 1);
    149             arrSqlPara = (SqlParameter[])arrListSqlPara.ToArray(typeof(SqlParameter));
    150             resultSql = "insert into {0} ({1}) values ({2})".FormatWith(tableName, sbInsColName.ToString(), sbInsColVal.ToString());
    151             return resultSql;
    152         }
    153 
    154         /// <summary>
    155         /// 
    156         /// </summary>
    157         /// <param name="model">对象实例</param>
    158         /// <param name="arrListSqlPara">SqlParameter参数</param>
    159         /// <returns>sql语句</returns>
    160         private string GetUpdateSqlParameter(object model, ref ArrayList arrListSqlPara)
    161         {
    162             string strUpdSql = string.Empty;
    163             StringBuilder sbUpdCol = new StringBuilder();
    164             var dic = ExtendMethod.Foreach(model);
    165             foreach (var item in dic)
    166             {
    167                 var val = item.Value;
    168                 var key = item.Key;
    169                 sbUpdCol.Append(string.Format("{0} = @{1},", key, key));
    170                 arrListSqlPara.Add(new SqlParameter("@" + key, val));
    171             }
    172             sbUpdCol.Remove(sbUpdCol.Length - 1, 1);
    173             strUpdSql = sbUpdCol.ToString();
    174             return strUpdSql;
    175         }
    176 
    177         /// <summary>
    178         /// 获得 update sql 语句
    179         /// </summary>
    180         /// <typeparam name="T">类名</typeparam>
    181         /// <param name="model">对象实例</param>
    182         /// <param name="where">筛选条件</param>
    183         /// <param name="arrSqlPara">SqlParameter参数</param>
    184         /// <returns>sql语句</returns>
    185         private string GetUpdateSql<T>(object model, Expression<Func<T, bool>> where, ref SqlParameter[] arrSqlPara) where T : class
    186         {
    187             ArrayList arrListSqlPara = new ArrayList();
    188             string tableName = string.Empty;
    189             string updateSql = string.Empty;
    190             string whereSql = string.Empty;
    191             string resultSql = string.Empty;
    192             tableName = GetTableName<T>();
    193             updateSql = GetUpdateSqlParameter(model, ref arrListSqlPara);
    194             whereSql = GetWhereSql<T>(where, ref arrListSqlPara);
    195             arrSqlPara = (SqlParameter[])arrListSqlPara.ToArray(typeof(SqlParameter));
    196             resultSql = string.Format("update {0} set {1} {2}", tableName, updateSql, whereSql);
    197             return resultSql;
    198         }
    199 
    200         /// <summary>
    201         /// 获得 delete sql 语句
    202         /// </summary>
    203         /// <typeparam name="T">类名</typeparam>
    204         /// <param name="where">筛选条件</param>
    205         /// <param name="arrSqlPara">SqlParameter参数</param>
    206         /// <returns>sql语句</returns>
    207         private string GetDeleteSql<T>(Expression<Func<T, bool>> where, ref SqlParameter[] arrSqlPara) where T : class
    208         {
    209             string resultSql = string.Empty;
    210             ArrayList arrListSqlPara = new ArrayList();
    211             string tableName = GetTableName<T>();
    212             string whereSql = GetWhereSql<T>(where, ref arrListSqlPara); ;
    213             arrSqlPara = (SqlParameter[])arrListSqlPara.ToArray(typeof(SqlParameter));
    214             resultSql = string.Format("delete from {0} {1}", tableName, whereSql);
    215             return resultSql;
    216         }
    217 
    218         #region 获得 select sql 语句
    219 
    220         private string GetFindListSql<T>(Expression<Func<T, object>> field, Expression<Func<T, bool>> where, Expression<Func<IQueryable<T>, IOrderedQueryable<T>>> orderBy, ref SqlParameter[] arrSqlPara) where T : class
    221         {
    222             string resultSql = string.Empty;
    223             ArrayList arrListSqlPara = new ArrayList();
    224             string tableName = GetTableName<T>();
    225             string queryField = GetQueryField<T>(field);
    226             string whereSql = GetWhereSql<T>(where, ref arrListSqlPara);
    227             string orderBySql = GetOrderBySql<T>(orderBy);
    228             arrSqlPara = (SqlParameter[])arrListSqlPara.ToArray(typeof(SqlParameter));
    229             resultSql = "select {0} from {1} {2} {3}".FormatWith(queryField, tableName, whereSql, orderBySql);
    230             return resultSql;
    231         }
    232 
    233         private string GetPageListSql<T>(int pageIndex, int pageSize, Expression<Func<T, object>> field, Expression<Func<T, bool>> where, Expression<Func<IQueryable<T>, IOrderedQueryable<T>>> orderBy, ref SqlParameter[] arrSqlPara) where T : class
    234         {
    235             string resultSql = string.Empty;
    236             ArrayList arrListSqlPara = new ArrayList();
    237             string tableName = GetTableName<T>();
    238             string queryField = GetQueryField<T>(field);
    239             string whereSql = GetWhereSql<T>(where, ref arrListSqlPara);
    240             string orderBySql = GetOrderBySql<T>(orderBy);
    241             arrSqlPara = (SqlParameter[])arrListSqlPara.ToArray(typeof(SqlParameter));
    242             resultSql = "select top {0} {1} from (select row_number() over({2}) rownumber,{3} from {4} {5} ) tt_{6} where rownumber  > {7}".FormatWith(pageSize, queryField, orderBySql, queryField, tableName, whereSql, tableName, (pageIndex - 1) * pageSize);
    243             return resultSql;
    244         }
    245 
    246         private string GetFindSql<T>(Expression<Func<T, object>> field, Expression<Func<T, bool>> where, ref SqlParameter[] arrSqlPara) where T : class
    247         {
    248             string resultSql = string.Empty;
    249             ArrayList arrListSqlPara = new ArrayList();
    250             string tableName = GetTableName<T>();
    251             string queryField = GetQueryField<T>(field);
    252             string whereSql = GetWhereSql<T>(where, ref arrListSqlPara);
    253             arrSqlPara = (SqlParameter[])arrListSqlPara.ToArray(typeof(SqlParameter));
    254             resultSql = "select {0} from {1} {2}".FormatWith(queryField, tableName, whereSql);
    255             return resultSql;
    256         }
    257 
    258         private string GetCountSql<T>(Expression<Func<T, bool>> where, ref SqlParameter[] arrSqlPara) where T : class
    259         {
    260             string resultSql = string.Empty;
    261             ArrayList arrListSqlPara = new ArrayList();
    262             string tableName = GetTableName<T>();
    263             string whereSql = GetWhereSql<T>(where, ref arrListSqlPara);
    264             arrSqlPara = (SqlParameter[])arrListSqlPara.ToArray(typeof(SqlParameter));
    265             resultSql = "select count(*) from {0} {1}".FormatWith(tableName, whereSql);
    266             return resultSql;
    267         }
    268 
    269         #endregion
    270 
    271         #endregion
    272 
    273         #region 事务操作
    274 
    275         /// <summary>
    276         /// 创建事务
    277         /// </summary>
    278         /// <returns></returns>
    279         public void BeginTransaction()
    280         {
    281             tran = conn.BeginTransaction();
    282         }
    283 
    284         /// <summary>
    285         /// 提交事务
    286         /// </summary>
    287         public void CommitTransaction()
    288         {
    289             tran.Commit();
    290         }
    291 
    292         /// <summary>
    293         /// 回滚事务
    294         /// </summary>
    295         public void RollbackTransaction()
    296         {
    297             tran.Rollback();
    298         }
    299 
    300         #endregion
    301 
    302         #region 释放资源
    303 
    304         /// <summary>
    305         /// 
    306         /// </summary>
    307         public void Dispose()
    308         {
    309             //throw new NotImplementedException();
    310             ClearConnection();
    311         }
    312 
    313         #endregion
    314 
    315         #region 构造函数
    316 
    317         /// <summary>
    318         /// 构造函数
    319         /// </summary>
    320         /// <param name="_ConnectionStrings">数据库连接字符串</param>
    321         /// <param name="_AutoClearConnection">单个DML(增删查改)操作后是否释放资源。true释放,false不释放。默认true</param>
    322         public DbServiceBase(string _ConnectionStrings, bool _AutoClearConnection = true)
    323         {
    324             this.ConnectionStrings = _ConnectionStrings;
    325             this.AutoClearConnection = _AutoClearConnection;
    326         }
    327 
    328         #endregion
    329 
    330         #region 增删查改
    331 
    332         #region 插入数据
    333 
    334         /// <summary>
    335         /// 插入数据
    336         /// </summary>
    337         /// <typeparam name="T">类名</typeparam>
    338         /// <param name="model">对象实例</param>
    339         /// <returns></returns>
    340         public int Create<T>(object model) where T : class
    341         {
    342             int affectedRows = 0;
    343             SqlParameter[] arrSqlPara = new SqlParameter[] { };
    344             var sql = GetCreateSql<T>(model, ref arrSqlPara);
    345             CreateConnection();
    346             SqlCommand cmd = new SqlCommand();
    347             cmd.Connection = conn;
    348             cmd.Parameters.AddRange(arrSqlPara);
    349             cmd.CommandText = sql;
    350             affectedRows = cmd.ExecuteNonQuery();
    351             if (AutoClearConnection)
    352             {
    353                 ClearConnection();
    354             }
    355             return affectedRows;
    356         }
    357 
    358         #endregion
    359 
    360         #region 更新数据
    361 
    362         /// <summary>
    363         /// 更新数据
    364         /// </summary>
    365         /// <typeparam name="T">类名</typeparam>
    366         /// <param name="model">对象实例</param>
    367         /// <param name="where">筛选条件</param>
    368         /// <returns>受影响行数</returns>
    369         public int Update<T>(object model, Expression<Func<T, bool>> where) where T : class
    370         {
    371             int affectedRows = 0;
    372             SqlParameter[] arrSqlPara = new SqlParameter[] { };
    373             var sql = GetUpdateSql<T>(model, where, ref arrSqlPara);
    374             CreateConnection();
    375             SqlCommand cmd = new SqlCommand();
    376             cmd.Connection = conn;
    377             cmd.Parameters.AddRange(arrSqlPara);
    378             cmd.CommandText = sql;
    379             affectedRows = cmd.ExecuteNonQuery();
    380             if (AutoClearConnection)
    381             {
    382                 ClearConnection();
    383             }
    384             return affectedRows;
    385         }
    386 
    387         #endregion
    388 
    389         #region 删除数据
    390 
    391         /// <summary>
    392         /// 删除数据
    393         /// </summary>
    394         /// <typeparam name="T">类名</typeparam>
    395         /// <param name="where">筛选条件</param>
    396         /// <returns>受影响行数</returns>
    397         public int Delete<T>(Expression<Func<T, bool>> where) where T : class
    398         {
    399             int affectedRows = 0;
    400             SqlParameter[] arrSqlPara = new SqlParameter[] { };
    401             var sql = GetDeleteSql<T>(where, ref arrSqlPara);
    402             CreateConnection();
    403             SqlCommand cmd = new SqlCommand();
    404             cmd.Connection = conn;
    405             cmd.Parameters.AddRange(arrSqlPara);
    406             cmd.CommandText = sql;
    407             affectedRows = cmd.ExecuteNonQuery();
    408             if (AutoClearConnection)
    409             {
    410                 ClearConnection();
    411             }
    412             return affectedRows;
    413         }
    414 
    415         #endregion
    416 
    417         #region 查询数据
    418 
    419         #region 分页查询数据
    420 
    421         /// <summary>
    422         /// 分页查询数据
    423         /// </summary>
    424         /// <typeparam name="T">类名</typeparam>
    425         /// <param name="pageIndex">页码</param>
    426         /// <param name="pageSize">页大小</param>
    427         /// <param name="field">查询字段</param>
    428         /// <param name="where">筛选条件</param>
    429         /// <param name="orderBy">排序</param>
    430         /// <returns></returns>
    431         public List<T> PageList<T>(int pageIndex, int pageSize, Expression<Func<IQueryable<T>, IOrderedQueryable<T>>> orderBy, Expression<Func<T, object>> field = null, Expression<Func<T, bool>> where = null) where T : class
    432         {
    433             if (orderBy == null)
    434             {
    435                 throw new Exception("分页必须设置排序方式");
    436             }
    437             SqlParameter[] arrSqlPara = new SqlParameter[] { };
    438             var sql = GetPageListSql<T>(pageIndex, pageSize, field, where, orderBy, ref arrSqlPara);
    439             CreateConnection();
    440             SqlCommand cmd = new SqlCommand();
    441             cmd.Connection = conn;
    442             cmd.Parameters.AddRange(arrSqlPara);
    443             cmd.CommandText = sql;
    444             SqlDataAdapter da = new SqlDataAdapter(cmd);
    445             DataSet ds = new DataSet();
    446             da.Fill(ds);
    447             da.Dispose();
    448             da = null;
    449             if (AutoClearConnection)
    450             {
    451                 ClearConnection();
    452             }
    453             List<T> list = null;
    454             if (ds.Tables.Count > 0)
    455             {
    456                 list = ds.Tables[0].DataTableToList<T>();   //DataTable转换为实体对象列表
    457             }
    458             return list;
    459         }
    460 
    461         #endregion
    462 
    463         #region 查询多条数据
    464 
    465         /// <summary>
    466         /// 查询多条数据
    467         /// </summary>
    468         /// <typeparam name="T">类名</typeparam>
    469         /// <param name="field">查询字段</param>
    470         /// <param name="where">筛选条件</param>
    471         /// <param name="orderBy">排序</param>
    472         /// <returns></returns>
    473         public List<T> FindList<T>(Expression<Func<T, object>> field = null, Expression<Func<T, bool>> where = null, Expression<Func<IQueryable<T>, IOrderedQueryable<T>>> orderBy = null) where T : class
    474         {
    475             SqlParameter[] arrSqlPara = new SqlParameter[] { };
    476             var sql = GetFindListSql<T>(field, where, orderBy, ref arrSqlPara);
    477             CreateConnection();
    478             SqlCommand cmd = new SqlCommand();
    479             cmd.Connection = conn;
    480             cmd.Parameters.AddRange(arrSqlPara);
    481             cmd.CommandText = sql;
    482             SqlDataAdapter da = new SqlDataAdapter(cmd);
    483             DataSet ds = new DataSet();
    484             da.Fill(ds);
    485             da.Dispose();
    486             da = null;
    487             if (AutoClearConnection)
    488             {
    489                 ClearConnection();
    490             }
    491             List<T> list = null;
    492             if (ds.Tables.Count > 0)
    493             {
    494                 list = ds.Tables[0].DataTableToList<T>();   //DataTable转换为实体对象列表
    495             }
    496             return list;
    497         }
    498 
    499         #endregion
    500 
    501         #region 查询单条数据
    502 
    503         /// <summary>
    504         /// 查询单条数据
    505         /// </summary>
    506         /// <typeparam name="T">类名</typeparam>
    507         /// <param name="field">查询字段</param>
    508         /// <param name="where">筛选条件</param>
    509         /// <returns></returns>
    510         public T Find<T>(Expression<Func<T, object>> field = null, Expression<Func<T, bool>> where = null) where T : class
    511         {
    512             SqlParameter[] arrSqlPara = new SqlParameter[] { };
    513             var sql = GetFindSql<T>(field, where, ref arrSqlPara);
    514             CreateConnection();
    515             SqlCommand cmd = new SqlCommand();
    516             cmd.Connection = conn;
    517             cmd.Parameters.AddRange(arrSqlPara);
    518             cmd.CommandText = sql;
    519             SqlDataAdapter da = new SqlDataAdapter(cmd);
    520             DataSet ds = new DataSet();
    521             da.Fill(ds);
    522             da.Dispose();
    523             da = null;
    524             if (AutoClearConnection)
    525             {
    526                 ClearConnection();
    527             }
    528             T model = null;
    529             if (ds.Tables.Count > 0)
    530             {
    531                 if (ds.Tables[0].Rows.Count > 0)
    532                 {
    533                     model = ds.Tables[0].Rows[0].DataRowToEntity<T>();  //DataRow转换为实体对象
    534                 }
    535             }
    536             return model;
    537         }
    538 
    539         #endregion
    540 
    541         #region 返回行数
    542 
    543         /// <summary>
    544         /// 返回行数
    545         /// </summary>
    546         /// <typeparam name="T">类名</typeparam>
    547         /// <param name="where">筛选条件</param>
    548         /// <returns></returns>
    549         public int Count<T>(Expression<Func<T, bool>> where = null) where T : class
    550         {
    551             var cnt = 0;
    552             SqlParameter[] arrSqlPara = new SqlParameter[] { };
    553             var sql = GetCountSql<T>(where, ref arrSqlPara);
    554             CreateConnection();
    555             SqlCommand cmd = new SqlCommand();
    556             cmd.Connection = conn;
    557             cmd.Parameters.AddRange(arrSqlPara);
    558             cmd.CommandText = sql;
    559             SqlDataAdapter da = new SqlDataAdapter(cmd);
    560             DataSet ds = new DataSet();
    561             da.Fill(ds);
    562             da.Dispose();
    563             da = null;
    564             if (AutoClearConnection)
    565             {
    566                 ClearConnection();
    567             }
    568             if (ds.Tables.Count > 0)
    569             {
    570                 if (ds.Tables[0].Rows.Count > 0)
    571                 {
    572                     cnt = ds.Tables[0].Rows[0][0].ToInt32();
    573                 }
    574             }
    575             return cnt;
    576         }
    577 
    578         #endregion
    579 
    580         #region 是否存在数据行
    581 
    582         /// <summary>
    583         /// 是否存在数据行
    584         /// </summary>
    585         /// <typeparam name="T">类名</typeparam>
    586         /// <param name="where">筛选条件</param>
    587         /// <returns></returns>
    588         public bool Exist<T>(Expression<Func<T, bool>> where = null) where T : class
    589         {
    590             var cnt = Count(where);
    591             return cnt > 0;
    592         }
    593 
    594         #endregion
    595 
    596         #endregion
    597 
    598         #region ExecuteNonQuery
    599 
    600         /// <summary>
    601         /// ExecuteNonQuery
    602         /// </summary>
    603         /// <typeparam name="T">类名</typeparam>
    604         /// <param name="sql">sql语句</param>
    605         /// <param name="arrSqlPara">SqlParameter参数</param>
    606         /// <returns></returns>
    607         public int ExecuteNonQuery<T>(string sql, params SqlParameter[] arrSqlPara) where T : class
    608         {
    609             int affectedRows = 0;
    610             CreateConnection();
    611             SqlCommand cmd = new SqlCommand();
    612             cmd.Connection = conn;
    613             cmd.Parameters.AddRange(arrSqlPara);
    614             cmd.CommandText = sql;
    615             affectedRows = cmd.ExecuteNonQuery();
    616             if (AutoClearConnection)
    617             {
    618                 ClearConnection();
    619             }
    620             return affectedRows;
    621         }
    622 
    623         #endregion
    624 
    625         #region ExecuteQuery
    626 
    627         /// <summary>
    628         /// ExecuteQuery
    629         /// </summary>
    630         /// <typeparam name="T">类名</typeparam>
    631         /// <param name="sql">sql语句</param>
    632         /// <param name="arrSqlPara">SqlParameter参数</param>
    633         /// <returns></returns>
    634         public DataSet ExecuteQuery<T>(string sql, params SqlParameter[] arrSqlPara) where T : class
    635         {
    636             CreateConnection();
    637             SqlCommand cmd = new SqlCommand();
    638             cmd.Connection = conn;
    639             cmd.Parameters.AddRange(arrSqlPara);
    640             cmd.CommandText = sql;
    641             SqlDataAdapter da = new SqlDataAdapter(cmd);
    642             DataSet ds = new DataSet();
    643             da.Fill(ds);
    644             da.Dispose();
    645             da = null;
    646             if (AutoClearConnection)
    647             {
    648                 ClearConnection();
    649             }
    650             return ds;
    651         }
    652 
    653         #endregion
    654 
    655         #endregion
    656     }
    View Code

    针对哪个数据库操作,需要在配置文件中配置连接字符串,可以配置若干个。

     1 public static class DbConnStrKey
     2     {
     3         internal static string MaiDb
     4         {
     5             get
     6             {
     7                 return "MaiDb".ValueOfConnectionStrings();
     8             }
     9         }
    10     }

    访问数据库的公用入口

     1     /// <summary>
     2     /// 用于单个数据库操作
     3     /// </summary>
     4     public class QueryService
     5     {
     6         /// <summary>
     7         /// 数据库名
     8         /// </summary>
     9         public static DbServiceBase MaiDb
    10         {
    11             get
    12             {
    13                 return new DbServiceBase(DbConnStrKey.MaiDb);
    14             }
    15         }
    16     }
    17 
    18     /// <summary>
    19     /// 用于一组数据库操作
    20     /// </summary>
    21     public class UnitService
    22     {
    23         /// <summary>
    24         /// 数据库名
    25         /// </summary>
    26         public static DbServiceBase MaiDb
    27         {
    28             get
    29             {
    30                 return new DbServiceBase(DbConnStrKey.MaiDb, false);
    31             }
    32         }
    33 
    34     }
    View Code

    以下是Demo

    1         public static int Add(object model)
    2         {
    3             return QueryService.MaiDb.Create<SYS_Resource>(model);
    4         }

    exec sp_executesql N'insert into SYS_Resource (ResoId,ResoParentId,ResoType,ResoName,ResoUrl,ResoDesc,ResoIsShow,ResoOrder) values (@ResoId,@ResoParentId,@ResoType,@ResoName,@ResoUrl,@ResoDesc,@ResoIsShow,@ResoOrder)',N'@ResoId nvarchar(36),@ResoParentId nvarchar(36),@ResoType nvarchar(4),@ResoName nvarchar(4),@ResoUrl nvarchar(4000),@ResoDesc nvarchar(4000),@ResoIsShow bit,@ResoOrder int',@ResoId=N'cbaf5484-cdcb-4511-afee-0abb7937d31d',@ResoParentId=N'89fa1a64-6e49-42b9-b2a7-bd5fce0ea54e',@ResoType=N'page',@ResoName=N'添加资源',@ResoUrl=N'',@ResoDesc=N'',@ResoIsShow=1,@ResoOrder=0
    go

     1         public static ServiceResult Del(string ResoId)
     2         {
     3             var result = new ServiceResult();
     4             using (var dbs = UnitService.MaiDb)
     5             {
     6                 TryCatch(()=>{
     7                     var hasChildren = dbs.Exist<SYS_Resource>(w => w.ResoParentId == ResoId);
     8                     if (hasChildren)
     9                     {
    10                         result.IsFailure("删除失败!该资源有下属资源!");
    11                         return;
    12                     }
    13                     else
    14                     {
    15                         dbs.Delete<SYS_Resource>(w => w.ResoId == ResoId);
    16                     }
    17                 },result); 
    18             }
    19             return result;
    20         }

     

    exec sp_executesql N'select count(*) from SYS_Resource  where (ResoParentId = @para1)',N'@para1 nvarchar(36)',@para1=N'cbaf5484-cdcb-4511-afee-0abb7937d31d'
    go
    exec sp_executesql N'delete from SYS_Resource  where (ResoId = @para1)',N'@para1 nvarchar(36)',@para1=N'cbaf5484-cdcb-4511-afee-0abb7937d31d'
    go

    1         public static IList<SYS_Resource> FindList()
    2         {
    3             return QueryService.MaiDb.FindList<SYS_Resource>();
    4         }

     改

    1         public static int Update(object model, Expression<Func<SYS_Resource, bool>> where)
    2         {
    3             return QueryService.MaiDb.Update<SYS_Resource>(model, where);
    4         }

    exec sp_executesql N'update SYS_Resource set ResoType = @ResoType,ResoName = @ResoName,ResoUrl = @ResoUrl,ResoDesc = @ResoDesc,ResoIsShow = @ResoIsShow,ResoOrder = @ResoOrder,ResoUpdateTime = @ResoUpdateTime  where (ResoId = @para1)',N'@ResoType nvarchar(4),@ResoName nvarchar(4),@ResoUrl nvarchar(4000),@ResoDesc nvarchar(4000),@ResoIsShow bit,@ResoOrder int,@ResoUpdateTime datetime,@para1 nvarchar(36)',@ResoType=N'page',@ResoName=N'编辑角色',@ResoUrl=N'',@ResoDesc=N'',@ResoIsShow=0,@ResoOrder=0,@ResoUpdateTime='2017-08-01 15:37:47.597',@para1=N'3e2fb3cb-92f6-44cb-80a1-3b15157d53c5'
    go

    一组数据库操作

     1         public static EditModel Find(string ResoId)
     2         {
     3             EditModel editModel = new EditModel();
     4             using (var dbs = UnitService.MaiDb)
     5             {
     6                 editModel.model = dbs.Find<SYS_Resource>(s => s, w => w.ResoId == ResoId);
     7                 if (!editModel.model.IsNull())
     8                 {
     9                     var ds = dbs.ExecuteQuery<SYS_Resource>("select ResoName from SYS_Resource where ResoId = @ResoId", new SqlParameter[1] { new SqlParameter("@ResoId", editModel.model.ResoParentId) });
    10                     if (ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
    11                     {
    12                         editModel.ResoParentName = ds.Tables[0].Rows[0][0].ToString();
    13                     }
    14                 }                
    15             }
    16             return editModel;
    17         }

    exec sp_executesql N'select * from SYS_Resource  where (ResoId = @para1)',N'@para1 nvarchar(36)',@para1=N'89fa1a64-6e49-42b9-b2a7-bd5fce0ea54e'
    go
    exec sp_executesql N'select ResoName from SYS_Resource where ResoId = @ResoId',N'@ResoId nvarchar(36)',@ResoId=N'74f6bb3b-8995-49b7-9b4b-db0e34aac304'
    go

    事务操作

     1             using (var dbs = UnitService.MaiDb)
     2             {
     3                 try
     4                 {
     5                     dbs.BeginTransaction();
     6                     //你的代码...
     7                     dbs.CommitTransaction();
     8                 }
     9                 catch (Exception ex)
    10                 {
    11                     dbs.RollbackTransaction();
    12                 }
    13             }

    Lambda如何转换SQL语句,请参考lambda表达式转换sql

    码农的世界,不知道可以走多远,坚持多久,好好珍惜当下。

  • 相关阅读:
    upc组队赛1 黑暗意志【stl-map】
    upc组队赛1 闪闪发光 【优先队列】
    upc组队赛1 流连人间的苏苏
    POJ 2387 Til the Cows Come Home 【最短路SPFA】
    POJ 2421 Constructing Roads 【最小生成树Kruscal】
    qrcode-使用
    submlie 配置php运行
    composer 安装laravel
    composer 配置镜像
    Laravel-队列
  • 原文地址:https://www.cnblogs.com/maiaimei/p/7271968.html
Copyright © 2011-2022 走看看