再谈SQLHelper
来源:互联网 发布:生死狙击阿春解说矩阵 编辑:程序博客网 时间:2024/06/12 05:10
在机房个人重构时虽然也使用了SQLHelper,但很多都是听他们说的要使用这个东西,自己也理解的很浅,在学习牛腩时恍然大悟,原来是这么一回事,正所谓之前是组装汽车,现在变为自己制造了,牛腩中看到了SQLHelper怎么一步步演化过来,其实它就是一个类,我们将对数据库操作共同的东西抽象出来封装在一个类里面,既然是对数据库操作,就包括查询和非查询,然后每种方法又包括带参和不带参,所以共有四种组合:不带参数和带参数的增删改、不带参数和带参数查询,然后在使用时根据需要给它传递一些参数进去。代码中是对四种方法的定义,其中这次除了使用try...catch,还用到using,用于定义一个范围,在此范围结束时释放资源。
public class SQLHelper { private SqlConnection conn = null; private SqlCommand cmd = null; private SqlDataReader sdr = null; public SQLHelper() //把共同的部分提炼出来,比如字符串连接和打开关闭数据库操作 { string connStr = ConfigurationManager.ConnectionStrings["connStr"].ConnectionString; conn = new SqlConnection(connStr); } private SqlConnection GetConn() { if (conn.State == ConnectionState.Closed) { conn.Open(); } return conn; } /// <summary> /// 执行不带参数增删改操作 /// </summary> /// <param name="cmdText">sql语句或存储过程</param> /// <param name="ct">命令类型</param> /// <returns>受影响行数</returns> public int ExecuteNonQuery(string cmdText,CommandType ct) { int res; try { 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; } /// <summary> /// 执行带参数增删改操作 /// </summary> /// <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 ; } /// <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 )) { dt.Load (sdr ); } return dt; } /// <summary> /// 执行带参数SQL语句查询或存错过程 /// </summary> /// <param name="cmdText">sql语句或存错过程</param> /// <param name="paras">参数数组</param> /// <param name="ct">命令类型</param> /// <returns>受影响行数</returns> public DataTable ExecuteQuery(string cmdText, SqlParameter[] paras,CommandType ct) { DataTable dt = new DataTable(); cmd = new SqlCommand(cmdText, GetConn()); cmd.CommandType = ct; cmd.Parameters.AddRange(paras); using (sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection)) { dt.Load(sdr); } return dt; } }
小结:SQLHelper不仅实现代码的复用,还体现面向对象中抽象和封装的特点,上次写这个类和这次写感受是不一样的,正可谓学习是一个反复的过程,只有一次次的刺激才能理解的深刻,知识之间也都是想通的,我们要做的是领悟它的思想。
0 0
- 再谈SQLHelper
- SqlHelper
- SqlHelper
- SqlHelper
- SqlHelper:
- sqlHelper
- SQLHelper
- SqlHelper
- SQLHelper
- SqlHelper
- SqlHelper
- SQLHelper
- SqlHelper
- sqlhelper
- SQLHelper
- SQLHelper
- SQLHelper
- SqlHelper
- Bios读文件与Grub(bootload)和initrd和内核对文件系统驱动的支持
- 使用ContentResolver获取手机所有图片及删除操作
- 无事也吐槽
- android MediaPlayer VideoView
- NSScanner iOS自带扫描器
- 再谈SQLHelper
- google ProtoBuf 开发者指南
- Powercenter server在unix环境下的安装
- 关于VS2008调试时加载符号缓慢的问题
- 指针数据和数组指针等问题
- 第9周项目6穷举法解决问题(委派任务)
- dos文本批处理示例大全
- 二元一次方程
- 利用信号量机制解决进程同步和互斥问题