收费系统——SQLHelper类分析+重构
来源:互联网 发布:网络日报 编辑:程序博客网 时间:2024/06/06 03:55
前言:
上回说到,重构时七层登录,未曾提起SQLHelper类,是因为该类是对访问数据库的增删改、有无参方法的一种整合,已经归并到D层。不过七层登录中的包图有所体现。本篇博客是Jackey在项目中的心得,我把漏洞的常规思路与重构后的SQLhelper进行了比较,当然漏洞依然有,还请各位上仙雅正!
人生若只如初见
因为系统频繁的使用SQL语句访问数据库,为了减少代码冗余,访问数据库的SQL语句大概分为两大类:增删改(有无参)和查询(有无参),这里以有参的增删改为例,代码如下:
using System.IO;using System.Configuration;using System.Reflection;using System.Data;using System.Data.SqlClient;using System.Windows.Forms;public class SQLHelper{public DataTable ExecuteNonQuery(string cmdTxt,CommandType cmdType,SqlParameter[]paras) {string StrDB=System.Configuration.ConfigurationManager.AppSettings["ConnStr"];//接收来自配置文件的数据SqlConnection conn = new SqlConnection(StrDB);//创建数据库连接SqlCommand cmd=default(SqlCommand);//定义命名变量DataSet adataset = null;//定义数据适配器,Dataset类表示一个存放在内存中数据缓存SqlDataAdapter adapter = default(SqlDataAdapter);cmd = new SqlCommand(cmdTxt,conn);//sqldataadapter类目的是填充datasetcmd.CommandType=cmdType ;//命令执行类型cmd.Parameters.AddRange(paras);//命令执行参数adapter = new SqlDataAdapter(cmd );//初始化新实例,用指定过的cmd作为selectcommand的属性adataset = new DataSet(); try{if (conn.State == ConnectionState.Closed){conn.Open();}adapter.Fill(adataset);向adapter对象中填充查询的数据。}catch (Exception ex){MessageBox.Show(ex.Message);}finally{if (conn.State==ConnectionState.Open ){conn.Close();}}return adataset.Tables[0];//获取包含在dataset中的表的集合}}
代码如是写,未尝不可,不过如果像前言所说添加四个方法。是不是每次都要写连接数据库代码、打开关闭连接。重复冗余的代码可以构造函数,实例化便可执行同样的效果。
柳暗花明又一村
这是重构后的代码:using System.IO;using System.Configuration;using System.Reflection;using System.Data;using System.Data.SqlClient;using System.Windows.Forms; public class SQLHelper { private SqlConnection conn = null; private SqlCommand cmd = null; private DataSet adataset = null; private SqlDataAdapter adapter=null; public SQLHelper() { string StrDB=System.Configuration.ConfigurationManager.AppSettings["ConnStr"]; //接收来自配置文件的数据 conn = new SqlConnection(StrDB); } private SqlConnection GetConn() { if (conn.State==ConnectionState.Closed) {conn.Open();} return conn; } /// <summary> /// 有参增删改 /// </summary> /// <param name="cmdTxt">SQL语句的增删改语句</param> /// <param name="cmdType">SQL语句类型,可为存储过程</param> /// <param name="paras">参数集合</param> /// <returns></returns> public DataTable ExecuteQuery(string cmdTxt,CommandType cmdType,SqlParameter[]paras) { cmd=default(SqlCommand); adapter=default(SqlDataAdapter); cmd = new SqlCommand(cmdTxt,conn); cmd.CommandType = cmdType; cmd.Parameters.AddRange(paras); adapter= new SqlDataAdapter(cmd); adataset = new DataSet(); adapter.Fill(adataset); return adataset.Tables[0]; }
扩展:
关于SQLCommandType的属性,Text, TableDirect, StoredProcedure,分别对应的是传入的SQL语句、数据库表名、存储过程名称。这里可以直接把这三类作为参数传给SQLHelper,起到的作用是一样的,而且更方便,Jackey日后会有相关的介绍博客。关于SQLDataAdapter与SQLDataReader,前者是访问一次即可关闭连接,运用提取出来的数据;后者是即时访问,运用数据期间数据库连接不可中断,不然就会Bug,个人觉得采用SQLDataAdapter会让系统更稳定些,当然每一种方法都会有各自的优点。择优选择!
结语:
学习便是一个迭代相加的过程,也就是N=N+1的过程,学习就是+1,在不断发现问题、解决问题、参考他人经验、然后总结经验的过程就是把1整合到N的过程,以便于站在N的基础上继续学习。
阅读全文
0 0
- 收费系统——SQLHelper类分析+重构
- 个人重构机房收费系统——SqlHelper介绍
- 重构个人版机房收费系统——sqlhelper
- 重构个人版机房收费系统——sqlHelper
- 机房收费系统个人重构3——sqlHelper
- 个人重构机房收费系统SqlHelper的使用
- SqlHelper的使用---重构机房收费系统
- 机房收费系统个人重构关于SQLHelper
- 机房收费系统重构之SQLhelper的理解
- 机房收费系统——SqlHelper
- 机房收费重构(四)-SqlHelper
- 机房收费系统重构—番外篇
- 机房收费系统总结之3——SqlHelper
- 机房收费系统数据库小助手——Sqlhelper
- 机房收费——sqlhelper
- vb.net机房收费系统——类的理解(sqlhelper)
- 重构机房收费系统——起步
- 机房收费系统重构(二)——总结
- Xutils
- 在web应用中使用solr(一)
- 搭建自己的Linux根文件系统
- 重写Python脚本时关于建立框架的想法
- LightOJ 1070 Algebraic Problem
- 收费系统——SQLHelper类分析+重构
- 周考1(配置)
- linux 添加python 模块搜索路径(以thrift为例)
- 光纤分类——多模和单模
- java
- protocol buffers 安装问题
- navicat 提示“1045 access denied for user 'root'@'localhost' ”解决方法
- 关于JavaScript的一些方法
- CentOS设置打开终端快捷键