【机房重构&牛腩】SQLHelper为D层提供强大的方法集合
来源:互联网 发布:网络奇兵 汉化 编辑:程序博客网 时间:2024/06/07 07:18
前言
我们都知道,机房收费系统(RoomChargeSystem,以后简称RCS),是一个通过操作,把数据输入到数据库中,其中必定不能少的就是与数据库交互以及数据库的操纵语言。
一、编制知识网
在第一次做RCS的时候,我就借鉴了“学生信息管理系统”中Model里面的一个ExecuteSQL函数:只需要把参数传进去,从而可以对数据库进行“增删改查”。但是在重构的时候刚开始没有意识到要把这个给汇总一下,等做出来几条线以后才发现自己需要抽象出来这些方法,然后从网上看了看、找了找如何对数据库操作方法进行抽象,然后就了解了SQLHelper这个类,下面我通过一步步的对比,把SQLHelper类给大家展示出来。
二、对比分类
依旧用登陆这个为例,在三层学习的时候我们都做过这个例子。其中在D层的代码是这样的:
1.链接数据库
2.创建数据库链接对象cmd
3.选择命令类型,告诉执行的是一个文本(text)、存储过程(StoredProcedure)还是表名称(TableDirect)
4.执行命令
public class UserDAO { public Login.Model .UserInfo SelectUser (string userName, string passWord) { using (SqlConnection conn=new SqlConnection (DBUtil .ConnString )) //建立数据库连接。 { #region 连接数据库,创建连接对象cmd。 SqlCommand cmd = conn.CreateCommand(); cmd.CommandText = @"SELECT ID ,UserName, Password ,Email FROM USERS WHERE UserName=@UserName AND Password=@Password"; cmd.CommandType = CommandType.Text; cmd.Parameters.Add(new SqlParameter ("@UserName",userName )); cmd.Parameters.Add(new SqlParameter("@Password", passWord)); #endregion conn.Open(); //打开连接 //创建数据读取对象,循环读取数据 SqlDataReader reader = cmd.ExecuteReader(); Login.Model.UserInfo user = null; while (reader.Read()) { if (user == null) { user = new Login.Model.UserInfo(); } user.ID = reader.GetInt32(0); //获取指定列的 32 位有符号整数形式的值 user.UserName = reader.GetString(1); user.Password = reader.GetString(2); if (!reader.IsDBNull(3)) { user.Email = reader.GetString(3); } } return user; //很重要 } } }
但是如果我要做查询余额有需要将上面的代码都写一遍,这样代码会有很多的重复,于是就轮到我们的SQLHelper华丽登场了。
在机房收费系统中,涉及到与数据库交互的无非是“增删改查”,而这四类有可以分为四类:带参数查询、不带参数查询、带参数的<增删改>、不带参数的<增删改>:
图一 机房收费系统功能划分
四、SQLHelper类
我用C#语言,编写了一个SQLHelper类,到时候就可以直接实例化他其中的方法
1)不带参数的查询
///<summary > ///执行传入的SQL查询语句 /// </summary> /// <param name="cmdText" >要执行的SQL查询语句或者是存储过程</param> /// <param name="ct">命令类型</param> /// <returns >返回更新的记录数 </returns> public DataTable ExecuteQuery(string cmdText,CommandType ct) { DataTable dt = new DataTable(); cmd = new SqlCommand(cmdText, GetConn()); cmd.CommandType = ct; using (sdr=cmd.ExecuteReader (CommandBehavior .CloseConnection )) //关闭sdr的时候,也关闭连接。 { dt.Load(sdr); //加载sdr,赋值给dt } return dt; }
2)带参数的查询
///<summary > ///执行带参数的SQL查询语句或者是存储过程 /// </summary> /// <param name="sql" >要执行的SQL查询语句或者是存储过程</param> /// <param name="paras">参数集合</param> /// <param name="ct">命令类型</param> /// <returns >返回更新的记录数 </returns> public DataTable ExecuteQuery(string sql, SqlParameter[] paras, CommandType ct) { DataTable dt = new DataTable(); cmd = new SqlCommand(sql, GetConn()); cmd.CommandType = ct; cmd.Parameters.AddRange(paras); using (sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection)) //关闭sdr的时候,也关闭连接。 { dt.Load(sdr); //加载sdr,赋值给dt } return dt; }
3)不带参数的增删改
///<summary > ///执行不带参数的SQL增删改语句或者存储过程 /// </summary> /// <param name="cmdText">要执行的SQL增删改语句或者存储过程</param> /// <param name ="ct">命令类型</param> /// <returns >返回更新的记录数 </returns> public int ExecuteNonQuery(string cmdText,CommandType ct) { int res; try { SqlCommand cmd = new SqlCommand(cmdText, GetConn()); cmd.CommandType = ct; res = cmd.ExecuteNonQuery(); } catch (Exception ex) { throw ex; } finally { if (conn.State == ConnectionState.Open) { conn.Close(); } } return res; }
4)带参数的增删改
///<summary > ///执行带参数的SQL增删改语句或者存储过程 /// </summary> /// <param name="paras" >参数集合</param> /// <param name="cmdText">要执行的SQL增删改语句或者存储过程</param> /// <param name ="ct">命令类型</param> /// <returns >返回更新的记录数 </returns> public int ExecuteNonQuery(string cmdText, SqlParameter[] paras, CommandType ct) { int res; using (cmd = new SqlCommand(cmdText, GetConn())) { cmd.CommandType = ct; cmd.Parameters.AddRange(paras); res = cmd.ExecuteNonQuery(); } return res; }
五、学习心得
学到现在,发现自己以前有好多的知识都没有认真总结,现在要用到,发现自己已经记不起来了。“出来混迟早是要还的”这句话真的是有道理的。总结的时候你可能不知道是什么意思,但是经过岁月的”沉淀“和自己反复的“反刍”。最后一定会在自己的总结里面看到好处!加油!
【作者:王雷 http://blog.csdn.net/kisscatforever】
- 【机房重构&牛腩】SQLHelper为D层提供强大的方法集合
- 机房重构--sqlhelper
- 【机房重构】sqlHelper
- 【机房重构】SQLHelper
- 【机房重构】sqlhelper
- 机房重构--SQLHelper
- 【牛腩新闻发布系统】SQLhelper重构
- 机房重构 之 SqlHelper
- 机房重构之SqlHelper
- 机房重构之SqlHelper
- 个人重构机房收费系统SqlHelper的使用
- SqlHelper的使用---重构机房收费系统
- 机房收费系统重构之SQLhelper的理解
- 【机房个人重构】sqlHelper------让我们的代码更高效
- 【牛腩】——sqlhelper层的优化旅程
- 机房收费重构(四)-SqlHelper
- 【个人机房重构】——SqlHelper
- 个人机房重构之SqlHelper
- IOS版admob里集成KeyMob插页式广告教程
- Javascript操作DOM常用API总结
- LeetCode(125)--Valid Palindrome
- linux GCC gdb 入门级常用指令以及参数
- 【机器学习算法】之SVM
- 【机房重构&牛腩】SQLHelper为D层提供强大的方法集合
- centos7下致命错误:mysql/mysql.h:没有那个文件或目录
- 配置CentOS7的JBoss允许EJB远程访问
- 7堂课教你成为追女孩高手
- 设计模式 -- 一个示例让你明白适配器模式
- 在ViewPager中使用Fragment实现界面左右滑动
- linux编程基础_08shell编程(函数)
- 关于各种无法解析的外部符号问题的相应解决方案
- Python入门