sqlhelper重构
2017-03-05 23:51
106 查看
一前言
二不断重构的sqlhelper
1sqlhelper初面貌
2sqlhelper重构
四结语
我们可以将sqlhelper分为两个大类,查询和增删改,为啥这样分,一般增删改我们是返回int,或是bool;如果是查询我们常常是返回datatable,以便将要查询的信息显示出来。
不过在这个基础上,还可以再细分,查询可以有带参数的查询和不带参数的查询,修改有带参数的修改和不带参数的修改。根据自己的需要而定吧。
二不断重构的sqlhelper
1sqlhelper初面貌
2sqlhelper重构
四结语
一、前言
之前机房重构的时候用到了sqlhelper,当时自己准备sqlhelper可谓是有点丈二的和尚,还好这次看牛腩的视频,发现sqlhelper并不是那样的复杂,自己对它也多了些喜爱。二、不断重构的sqlhelper
对于sqlhelper,我想起了当时学生信息系统时候写的一个封装查询的方法,这里的sqlhelper也可以理解为这个作用。我们可以将sqlhelper分为两个大类,查询和增删改,为啥这样分,一般增删改我们是返回int,或是bool;如果是查询我们常常是返回datatable,以便将要查询的信息显示出来。
不过在这个基础上,还可以再细分,查询可以有带参数的查询和不带参数的查询,修改有带参数的修改和不带参数的修改。根据自己的需要而定吧。
2.1sqlhelper初面貌
之前一直不知道,sqlhelper是怎么来的,通过看视频发现自己也有了一个系统的认识,感觉很棒~最开始的sqlhelper是这样的,以下是不带参数的查询和增删改。/// <summary> /// 该方法执行传入的增删改sql语句 /// </summary> /// <param name="sql">要执行的增删改sql语句</param> /// <returns>返回更新的记录数</returns> public int ExecuteNonQuery(string sql) { string connStr = "server = viola; database =newssystem;uid =sa;pwd=123456"; SqlConnection conn = new SqlConnection(connStr); conn.Open(); SqlCommand cmd = new SqlCommand(sql, conn); int res = cmd.ExecuteNonQuery(); conn.Close(); return res; }
/// <summary> /// 该方法执行传入的sql查询语句 /// </summary> /// <param name="sql">sql查询语句</param> /// <returns></returns> public DataTable ExecuteQuery(string sql) { DataTable dt = new DataTable(); string connStr = "server = viola; database =newssystem;uid =sa;pwd=123456"; SqlConnection conn = new SqlConnection(connStr); conn.Open(); SqlCommand cmd = new SqlCommand(sql, conn); //数据要先装入reader SqlDataReader sqlReader = cmd.ExecuteReader(); //Reader要装入dt中 dt.Load(sqlReader); //关闭reader sqlReader.Close(); conn.Close(); return dt; }
2.2sqlhelper重构
我们发现,上面的sqlhelper不是太好,好多重复的东西都在写,比如连接的语句,连接的打开和关闭,每一次都要声明的cmd和reader。怎么办呢?我们可以把重复的东西,提出来放在构造函数中去,这样实例化的时候就有了~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> /// 该方法执行传入sql的增删改语句 /// </summary> /// <param name="sql">要执行的增删改sql语句</param> /// <returns>返回更新的记录数</returns> public int ExecuteNonQuery(string sql) { int res; try { cmd = new SqlCommand(sql, GetConn()); res = cmd.ExecuteNonQuery(); } catch (Exception ex) { throw ex; } finally { if (conn.State == ConnectionState.Open) { conn.Close(); } } return res; } /// <summary> /// 该方法执行传入的sql查询语句 /// </summary> /// <param name="sql">sql查询语句</param> /// <returns></returns> public DataTable ExecuteQuery(string sql) { DataTable dt = new DataTable(); cmd = new SqlCommand(sql, GetConn()); //数据要先装入reader using (sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection)) //using是()中内容用完后会直接关闭,commandbehavior.closeconnection是关闭reader后关联关闭connection { dt.Load(sdr); } return dt; } /// <summary> /// 执行带参数的sql增删改语句 /// </summary> /// <param name="sql">sql增删改语句</param> /// <param name="paras">参数集合</param> /// <returns></returns> public int ExecuteNonQuery(string sql, SqlParameter[] paras) { int res; using (cmd = new SqlCommand(sql, GetConn())) { cmd.Parameters.AddRange(paras); res = cmd.ExecuteNonQuery(); } return res; } /// <summary> /// 执行带参数的的sql语句查询 /// </summary> /// <param name="sql">传入的的sql语句</param> /// <param name="paras">传入的参数</param> /// <returns></returns> public DataTable ExecuteQuery(string sql, SqlParameter[] paras) { DataTable dt = new DataTable(); cmd = new SqlCommand(sql, GetConn()); cmd.Parameters.AddRange(paras); using (sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection)) //using是()中内容用完后会直接关闭,commandbehavior.closeconnection是关闭reader后关联关闭connection { dt.Load(sdr); } return dt; } }
四、结语
慢慢的越来越体会到学习是一个过程,我们不断的解决问题,不断的积累,不断的思考,然后自己可以有意外的收获。相关文章推荐
- c#调用COM组件
- C#实现把指定数据写入串口
- C#动态创建button的方法
- C#使用第三方组件生成二维码汇总
- C#中抽象方法与虚拟方法的区别
- c#中虚函数的相关使用方法
- C#实现给图片加水印的方法
- C#使用加边法计算行列式的值
- C#实现多线程的同步方法实例分析
- C#中尾递归的使用、优化及编译器优化
- C#中的delegate委托类型基本学习教程
- C#实现子窗体与父窗体通信方法实例总结
- C#通用邮件发送类分享
- 举例讲解C#中自动实现的属性
- C#中this的用法集锦
- C#数据结构之顺序表(SeqList)实例详解
- C#.NET获取拨号连接的宽带连接方法
- C#网络适配器简单操作
- C#实现导出List数据到xml文件的方法【附demo源码下载】
- C#异步绑定数据实现方法