DbHelperSQL
1using System;
2using System.Collections.Generic;
3using System.Text;
4using System.Data;
5using System.Data.SqlClient;
6using System.Reflection;//反射命名空间
7
8namespace LeaveWordBorad.DAL
9 {
10///<summary>
11///数据层 - 数据库操作类
12///</summary>
13internal class DbHelperSQL
14    {
15//获得配置⽂件的连接字符串
16public 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>
25public static DataTable GetDataTable(string strSql, params SqlParameter[] paras)
26        {
27            DataTable dt = null;
28using (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            }
39return 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>
50public static int ExcuteNonQuery(string strSql, params SqlParameter[] paras)
51        {
52int res = -1;
53//创建连接通道
54using (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();
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>
74public static int ExcuteNonQuerys(string[] strSqls, SqlParameter[][] paras2Arr)
75        {
76int res = 0;
77//创建连接通道
78using (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;
89try
90                {
91//循环执⾏sql语句
92for (int i = 0; i < strSqls.Length; i++)
93                    {
94//获得要执⾏的sql语句
95string strSql = strSqls[i];
96//为命令对象指定此次执⾏的 sql语句
97                        cmd.CommandText = strSql;
98//添加参数
99if (paras2Arr.Length > i)//如果参数2维数组的长度⼤于当前循环的下标
100                        {
101                            cmd.Parameters.AddRange(paras2Arr[i]);//将交错数组的第⼀个元素(其实也是⼀个数组,添加到参数集合中)102                        }
103                        res += cmd.ExecuteNonQuery();
104                        cmd.Parameters.Clear();
sqltransaction什么意思105                    }
106                    tran.Commit();//提交事务
107                }
108catch (Exception ex)
109                {
110                    res = 0;
111                    tran.Rollback();//回滚事务
112throw ex;
113                }
114            }
115return 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>
126public static int ExcuteScalar(string strSql, params SqlParameter[] paras)
129//创建连接通道
130using (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            }
139return 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>
153public static DataTable GetPageListByProc(string proName,int pageIndex, int pageSize,bool isDel, out int pageCount, out int rowCount) 154        {
155            DataTable dt = new DataTable();
156//创建连接通道
157using (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//返回数据表
182return 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>
197public static int ExcuteNonQueryWithProc(string proName, params SqlParameter[] paras)
198        {
199            DataTable dt = new DataTable();
200//创建连接通道
201using (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();
207return 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>
219public static DataTable GetPagedListForObjectDataSource(int pageSize, int startRowIndex)
220        {
221string 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 = {
223new SqlParameter("@startRowIndex",startRowIndex),
224new SqlParameter("@size",pageSize+startRowIndex)
225                                    };
226return 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>
237public static SqlDataReader ExcuteDataReader(string strSelectCmd, params SqlParameter[] paras)
238        {
239            SqlConnection conn = null;
240try
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.返回读取器
253return dr;
254            }
255catch (Exception ex)
256            {
256            {
257                conn.Dispose();
258throw 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>
271public static List<T2> ExcuteList<T2>(string strSelectCmd, params SqlParameter[] paras)
272        {
273//1.创建连接通道
274using (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>
285if (dt.Rows.Count > 0)
286                {
287//6.创建泛型集合对象
288                    List<T2> list = new List<T2>();
289//7.遍历数据⾏,将⾏数据存⼊实体对象中,并添加到泛型集合中list
290foreach (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遍历属性数组
300foreach (PropertyInfo p in properties)
301                        {
302//7.4.1获得属性名,作为列名
303string colName = p.Name;
304//7.4.2根据列名获得当前循环⾏对应列的值
305object 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                    }
313return list;
314                }
315            }
316return null;
317        }
318#endregion
319
320#region 6.查询结果集⾥的第⼀个单元格的值(单个值)-- 泛型版本 + static T ExcuteScalar<T>(string strSelectCmd, params SqlParameter[] paras)

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。