首页 > 代码库 > DbHelperSQL

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         #endregion118 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         #endregion142 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         #endregion185 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         #endregion211 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         #endregion229 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             try241             {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         #endregion262 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.遍历数据行,将行数据存入 实体对象中,并添加到 泛型集合中list290                     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 =http://www.mamicode.com/ 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         #endregion319 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         #endregion340 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.遍历数据行,将行数据存入 实体对象中,并添加到 泛型集合中list355                 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 =http://www.mamicode.com/ 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         #endregion383 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 =http://www.mamicode.com/= null))397                     {398                         parameter.Value =http://www.mamicode.com/ DBNull.Value;399                     }400                     cmd.Parameters.Add(parameter);401                 }402             }403         }404     }405 }
View Code

http://files.cnblogs.com/HuoAA/DbHelperSQL.rar

DbHelperSQL