zoukankan      html  css  js  c++  java
  • DbHelperSQL

      1 using System;
      2 using System.Collections.Generic;
      3 using System.Text;
      4 using System.Data;
      5 using System.Data.SqlClient;
      6 using System.Reflection;//反射命名空间
      7 
      8 namespace LeaveWordBorad.DAL
      9 {
     10     /// <summary>
     11     /// 数据层 - 数据库 操作类
     12     /// </summary>
     13     internal class DbHelperSQL
     14     {
     15         //获得配置文件的连接字符串
     16         public static string strConn = System.Configuration.ConfigurationManager.ConnectionStrings["connStr"].ConnectionString;
     17 
     18         #region 01.查询数据表 +static DataTable GetTabel(string strSql, params SqlParameter[] paras)
     19         /// <summary>
     20         /// 查询数据表
     21         /// </summary>
     22         /// <param name="strSql">sql语句</param>
     23         /// <param name="paras">参数数组</param>
     24         /// <returns></returns>
     25         public static DataTable GetDataTable(string strSql, params SqlParameter[] paras)
     26         {
     27             DataTable dt = null;
     28             using (SqlConnection conn = new SqlConnection(strConn))
     29             {
     30                 //创建 适配器对象(sql命令,连接通道)
     31                 SqlDataAdapter da = new SqlDataAdapter(strSql, conn);
     32                 //添加参数
     33                 da.SelectCommand.Parameters.AddRange(paras);
     34                 //创建数据表对象
     35                 dt = new DataTable(); 
     36                 //适配器 读取数据库,并将查询的结果 装入程序的 dt里
     37                 da.Fill(dt);
     38             }
     39             return dt;
     40         } 
     41         #endregion
     42 
     43         #region 02.执行 增删改 (非查询语句) +int ExcuteNonQuery(string strSql, params SqlParameter[] paras)
     44         /// <summary>
     45         /// 执行 增删改 (非查询语句)
     46         /// </summary>
     47         /// <param name="strSql"></param>
     48         /// <param name="paras"></param>
     49         /// <returns></returns>
     50         public static int ExcuteNonQuery(string strSql, params SqlParameter[] paras)
     51         {
     52             int res = -1;
     53             //创建连接通道
     54             using (SqlConnection conn = new SqlConnection(strConn))
     55             {
     56                 //创建命令对象(sql语句,连接通道)
     57                 SqlCommand cmd = new SqlCommand(strSql, conn);
     58                 //添加参数
     59                 cmd.Parameters.AddRange(paras);
     60                 conn.Open();
     61                 res = cmd.ExecuteNonQuery();
     62             }
     63             return res;
     64         } 
     65         #endregion
     66         
     67         #region 02a.执行 多条增删改 (非查询语句) +int ExcuteNonQuery(string strSql, params SqlParameter[] paras)
     68         /// <summary>
     69         /// 执行 多条增删改 (非查询语句)
     70         /// </summary>
     71         /// <param name="strSql"></param>
     72         /// <param name="paras"></param>
     73         /// <returns></returns>
     74         public static int ExcuteNonQuerys(string[] strSqls, SqlParameter[][] paras2Arr)
     75         {
     76             int res = 0;
     77             //创建连接通道
     78             using (SqlConnection conn = new SqlConnection(strConn))
     79             {
     80                 conn.Open();
     81                 //创建 事务
     82                 SqlTransaction tran = conn.BeginTransaction();
     83                 //创建命令对象
     84                 SqlCommand cmd = new SqlCommand();
     85                 //为命令对象指定连接通道
     86                 cmd.Connection = conn;
     87                 //为命令对象指定事务
     88                 cmd.Transaction = tran;
     89                 try
     90                 {
     91                     //循环执行sql语句
     92                     for (int i = 0; i < strSqls.Length; i++)
     93                     {
     94                         //获得要执行的sql语句
     95                         string strSql = strSqls[i];
     96                         //为命令对象指定 此次执行的 sql语句
     97                         cmd.CommandText = strSql;
     98                         //添加参数
     99                         if (paras2Arr.Length > i)//如果 参数2维数组的长度大于当前循环的下标
    100                         {
    101                             cmd.Parameters.AddRange(paras2Arr[i]);//将 交错数组 的第一个元素(其实也是一个数组,添加到参数集合中)
    102                         }
    103                         res += cmd.ExecuteNonQuery();
    104                         cmd.Parameters.Clear();
    105                     }
    106                     tran.Commit();//提交事务
    107                 }
    108                 catch (Exception ex)
    109                 {
    110                     res = 0;
    111                     tran.Rollback();//回滚事务
    112                     throw ex;
    113                 }
    114             }
    115             return res;
    116         }
    117         #endregion
    118 
    119         #region 02.执行 查询单个值 +int ExcuteScalar(string strSql, params SqlParameter[] paras)
    120         /// <summary>
    121         /// 执行 增删改 (非查询语句)
    122         /// </summary>
    123         /// <param name="strSql"></param>
    124         /// <param name="paras"></param>
    125         /// <returns></returns>
    126         public static int ExcuteScalar(string strSql, params SqlParameter[] paras)
    127         {
    128             int res = -1;
    129             //创建连接通道
    130             using (SqlConnection conn = new SqlConnection(strConn))
    131             {
    132                 //创建命令对象(sql语句,连接通道)
    133                 SqlCommand cmd = new SqlCommand(strSql, conn);
    134                 //添加参数
    135                 cmd.Parameters.AddRange(paras);
    136                 conn.Open();
    137                 res = Convert.ToInt32(cmd.ExecuteScalar());
    138             }
    139             return res;
    140         }
    141         #endregion
    142 
    143         #region 04.执行 特殊的 分页存储过程 +DataTable GetPageListByProc(int pageIndex, int pageSize,out int pageCount,out int rowCount)
    144         /// <summary>
    145         ///04.执行 特殊的 分页存储过程
    146         /// </summary>
    147         /// <param name="proName">存储过程名称</param>
    148         /// <param name="pageIndex">页码</param>
    149         /// <param name="pageSize">页容量</param>
    150         /// <param name="pageCount">总页数--输出</param>
    151         /// <param name="rowCount">总行数--输出</param>
    152         /// <returns></returns>
    153         public static DataTable GetPageListByProc(string proName,int pageIndex, int pageSize,bool isDel, out int pageCount, out int rowCount)
    154         {
    155             DataTable dt = new DataTable();
    156             //创建连接通道
    157             using (SqlConnection conn = new SqlConnection(strConn))
    158             {
    159                 //创建适配器对象
    160                 SqlDataAdapter da = new SqlDataAdapter(proName, conn);
    161                 //设置 命令类型 为存储过程
    162                 da.SelectCommand.CommandType = CommandType.StoredProcedure;
    163                 //设置 参数
    164                 da.SelectCommand.Parameters.AddWithValue("@pageIndex", pageIndex);//当前页码
    165                 da.SelectCommand.Parameters.AddWithValue("@pageSize", pageSize);//页容量
    166                 da.SelectCommand.Parameters.AddWithValue("@isDel", isDel);//页容量
    167                 
    168                 //在存储过程中 输出参数
    169                 da.SelectCommand.Parameters.Add(new SqlParameter("@pageCount", SqlDbType.Int));//总页数
    170                 da.SelectCommand.Parameters.Add(new SqlParameter("@rowCount", SqlDbType.Int));//总行数
    171                 //将后面两个参数 设置为 输出类型
    172                 da.SelectCommand.Parameters[3].Direction = ParameterDirection.Output;
    173                 da.SelectCommand.Parameters[4].Direction = ParameterDirection.Output;
    174 
    175                 //执行 并将查询到的 结果 赋给 数据表对象
    176                 da.Fill(dt);
    177                 //获得 存储过程 返回的 输出参数
    178                 pageCount = Convert.ToInt32(da.SelectCommand.Parameters[3].Value);
    179                 rowCount = Convert.ToInt32(da.SelectCommand.Parameters[4].Value);
    180             }
    181             //返回数据表
    182             return dt;
    183         } 
    184         #endregion
    185 
    186         #region 04.执行 特殊的 分页存储过程 +DataTable GetPageListByProc(int pageIndex, int pageSize,out int pageCount,out int rowCount)
    187         /// <summary>
    188         ///04.执行 特殊的 分页存储过程
    189         /// </summary>
    190         /// <param name="proName">存储过程名称</param>
    191         /// <param name="pageIndex">页码</param>
    192         /// <param name="pageSize">页容量</param>
    193         /// <param name="userId">用户id</param>
    194         /// <param name="pageCount">总页数--输出</param>
    195         /// <param name="rowCount">总行数--输出</param>
    196         /// <returns></returns>
    197         public static int ExcuteNonQueryWithProc(string proName, params SqlParameter[] paras)
    198         {
    199             DataTable dt = new DataTable();
    200             //创建连接通道
    201             using (SqlConnection conn = new SqlConnection(strConn))
    202             {
    203                 SqlCommand cmd = new SqlCommand(proName,conn);
    204                 cmd.CommandType = CommandType.StoredProcedure;
    205                 cmd.Parameters.AddRange(paras);
    206                 conn.Open();
    207                 return cmd.ExecuteNonQuery();
    208             }
    209         }
    210         #endregion
    211 
    212         #region 01.3为 对象数据源控件 提供 分页数据
    213         /// <summary>
    214         /// 01.3为 对象数据源控件 提供 分页数据
    215         /// </summary>
    216         /// <param name="pageSize">页容量</param>
    217         /// <param name="startRowIndex">起始行下标</param>
    218         /// <returns></returns>
    219         public static DataTable GetPagedListForObjectDataSource(int pageSize, int startRowIndex)
    220         {
    221             string strSql = "select * from(select Row_Number() over(order by cid) as num, * from Classes)as temp where num>@startRowIndex and num<=@size";
    222             SqlParameter[] paras = { 
    223                                    new SqlParameter("@startRowIndex",startRowIndex),
    224                                    new SqlParameter("@size",pageSize+startRowIndex)
    225                                    };
    226             return GetDataTable(strSql, paras);
    227         } 
    228         #endregion
    229 
    230         #region 3.执行查询多行语句 - 返回数据读取器  +static SqlDataReader ExcuteDataReader(string strSelectCmd, params SqlParameter[] paras)
    231         /// <summary>
    232         /// 执行查询多行语句 - 返回数据读取器
    233         /// </summary>
    234         /// <param name="strSelectCmd"></param>
    235         /// <param name="paras"></param>
    236         /// <returns></returns>
    237         public static SqlDataReader ExcuteDataReader(string strSelectCmd, params SqlParameter[] paras)
    238         {
    239             SqlConnection conn = null;
    240             try
    241             {
    242                 //1.创建连接通道
    243                 conn = new SqlConnection(strConn);
    244                 //2.创建命令对象
    245                 SqlCommand cmd = new SqlCommand(strSelectCmd, conn);
    246                 //3.添加命令参数
    247                 cmd.Parameters.AddRange(paras);
    248                 //4.打开连接
    249                 conn.Open();
    250                 //5.创建读取器(当关闭此读取器时,会自动关闭连接通道)
    251                 SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);//当关闭此读取器时,会自动关闭连接通道
    252                 //6.返回读取器
    253                 return dr;
    254             }
    255             catch (Exception ex)
    256             {
    257                 conn.Dispose();
    258                 throw ex;
    259             }
    260         }
    261         #endregion
    262 
    263         #region  2.0升级泛型版 ------ 执行查询多行语句 - 返回数据表
    264         /// <summary>
    265         /// 2.0升级泛型版 ------ 执行查询多行语句 - 返回数据表
    266         /// </summary>
    267         /// <typeparam name="T2">泛型类型</typeparam>
    268         /// <param name="strSelectCmd">查询sql语句</param>
    269         /// <param name="paras">查询参数</param>
    270         /// <returns>泛型集合</returns>
    271         public static List<T2> ExcuteList<T2>(string strSelectCmd, params SqlParameter[] paras)
    272         {
    273             //1.创建连接通道
    274             using (SqlConnection conn = new SqlConnection(strConn))
    275             {
    276                 //2.创建适配器
    277                 SqlDataAdapter da = new SqlDataAdapter(strSelectCmd, conn);
    278                 //2.1设置查询命令的参数
    279                 da.SelectCommand.Parameters.AddRange(paras);
    280                 //3.数据表
    281                 DataTable dt = new DataTable();
    282                 //4.将数据查询并填充到数据表中
    283                 da.Fill(dt);
    284                 //5.将DataTable转成泛型集合List<T2>
    285                 if (dt.Rows.Count > 0)
    286                 {
    287                     //6.创建泛型集合对象
    288                     List<T2> list = new List<T2>();
    289                     //7.遍历数据行,将行数据存入 实体对象中,并添加到 泛型集合中list
    290                     foreach (DataRow row in dt.Rows)
    291                     {
    292                         //留言:等学完反射后再讲~~~~!
    293                         //7.1先获得泛型的类型(里面包含该类的所有信息---有什么属性啊,有什么方法啊,什么字段啊....................)
    294                         Type t = typeof(T2);
    295                         //7.2根据类型创建该类型的对象
    296                         T2 model = (T2)Activator.CreateInstance(t);// new MODEL.Classes()
    297                         //7.3根据类型 获得 该类型的 所有属性定义
    298                         PropertyInfo[] properties = t.GetProperties();
    299                         //7.4遍历属性数组
    300                         foreach (PropertyInfo p in properties)
    301                         {
    302                             //7.4.1获得属性名,作为列名
    303                             string colName = p.Name;
    304                             //7.4.2根据列名 获得当前循环行对应列的值
    305                             object colValue = row[colName];
    306                             //7.4.3将 列值 赋给 model对象的p属性
    307                             //model.ID=colValue;
    308                             p.SetValue(model, colValue, null);
    309                         }
    310                         //7.5将装好 了行数据的 实体对象 添加到 泛型集合中 O了!!!
    311                         list.Add(model);
    312                     }
    313                     return list;
    314                 }
    315             }
    316             return null;
    317         }
    318         #endregion
    319 
    320         #region 6.查询结果集里的第一个单元格的值(单个值)-- 泛型版本 + static T ExcuteScalar<T>(string strSelectCmd, params SqlParameter[] paras)
    321         /// <summary>
    322         /// 查询结果集里的第一个单元格的值(单个值)-- 泛型版本
    323         /// </summary>
    324         /// <typeparam name="T">类型参数</typeparam>
    325         /// <param name="strSelectCmd"></param>
    326         /// <param name="paras"></param>
    327         /// <returns></returns>
    328         public static T ExcuteScalar<T>(string strSelectCmd, params SqlParameter[] paras)
    329         {
    330             using (SqlConnection conn = new SqlConnection(strConn))
    331             {
    332                 SqlCommand cmd = new SqlCommand(strSelectCmd, conn);
    333                 cmd.Parameters.AddRange(paras);
    334                 conn.Open();
    335                 object o = cmd.ExecuteScalar();
    336                 return (T)Convert.ChangeType(o, typeof(T));
    337             }
    338         }
    339         #endregion
    340 
    341         #region 将数据表 转成对应 T2 类型的泛型集合对象
    342         /// <summary>
    343         /// 将数据表 转成对应 T2 类型的泛型集合对象
    344         /// </summary>
    345         /// <typeparam name="T2">泛型类型</typeparam>
    346         /// <returns>泛型集合</returns>
    347         public static List<T2> Table2List<T2>(DataTable dt)
    348         {
    349             //5.将DataTable转成泛型集合List<T2>
    350             if (dt.Rows.Count > 0)
    351             {
    352                 //6.创建泛型集合对象
    353                 List<T2> list = new List<T2>();
    354                 //7.遍历数据行,将行数据存入 实体对象中,并添加到 泛型集合中list
    355                 foreach (DataRow row in dt.Rows)
    356                 {
    357                     //留言:等学完反射后再讲~~~~!
    358                     //7.1先获得泛型的类型(里面包含该类的所有信息---有什么属性啊,有什么方法啊,什么字段啊....................)
    359                     Type t = typeof(T2);
    360                     //7.2根据类型创建该类型的对象
    361                     T2 model = (T2)Activator.CreateInstance(t);// new MODEL.Classes()
    362                     //7.3根据类型 获得 该类型的 所有属性定义
    363                     PropertyInfo[] properties = t.GetProperties();
    364                     //7.4遍历属性数组
    365                     foreach (PropertyInfo p in properties)
    366                     {
    367                         //7.4.1获得属性名,作为列名
    368                         string colName = p.Name;
    369                         //7.4.2根据列名 获得当前循环行对应列的值
    370                         object colValue = row[colName];
    371                         //7.4.3将 列值 赋给 model对象的p属性
    372                         //model.ID=colValue;
    373                         p.SetValue(model, colValue, null);
    374                     }
    375                     //7.5将装好 了行数据的 实体对象 添加到 泛型集合中 O了!!!
    376                     list.Add(model);
    377                 }
    378                 return list;
    379             }
    380             return null;
    381         }
    382         #endregion
    383 
    384         public static void PrepareCommand(SqlCommand cmd, SqlConnection conn,SqlTransaction trans, CommandType type, string cmdText, SqlParameter[] cmdParms)
    385         {
    386             if (conn.State != ConnectionState.Open) conn.Open();
    387             cmd.Connection = conn;
    388             cmd.CommandText = cmdText;
    389             cmd.CommandType = type;
    390             if (trans != null) cmd.Transaction = trans;
    391             if (cmdParms != null)
    392             {
    393                 foreach (SqlParameter parameter in cmdParms)
    394                 {
    395                     if ((parameter.Direction == ParameterDirection.InputOutput || parameter.Direction == ParameterDirection.Input) &&
    396                         (parameter.Value == null))
    397                     {
    398                         parameter.Value = DBNull.Value;
    399                     }
    400                     cmd.Parameters.Add(parameter);
    401                 }
    402             }
    403         }
    404     }
    405 }
    View Code
  • 相关阅读:
    剑指offer-翻转单词序列
    剑指offer-丑数
    剑指offer-把数组排成最小的数
    mysql笔记(13)-视图的概念和使用
    mysql笔记(12)-外键约束的添加和删除
    mysql笔记(11)-约束的添加、修改和删除
    mysql笔记(10)-数据的插入和更新(insert/update/case)
    mysql笔记(9)-表的创建和删除(drop/truncate/delete)
    mysql笔记(8)-嵌套查询之in、exists
    mysql笔记(7)-多表查询之自然连接、外连接
  • 原文地址:https://www.cnblogs.com/HuoAA/p/4104376.html
Copyright © 2011-2022 走看看