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小时内删除。
发表评论