牛腩新闻发布系统--重构SQL Helper

天外有天,人外有人。自我进提高班以来,一直都在考虑,先前重构机房的时候,看到别人在D层加了SQL Helper,就一定要学者加上玩玩,等做完了以后,进行下一个阶段牛腩的时候,又看到了人家建的SQL Helper,不觉感慨,跟人家比,人家就是我的老师!

闲话就不多说了,进行正式的话题:如何写好SQL Helper?从宏观上讲,SQL Helper是完全体现了面向对象的抽象和封装的思想的。它对重复代码抽取出来,进行抽象,抽象就是为了封装,提高了代码的复用。

那么就该讨论怎么写的问题。如果我先上来给大家一段代码,多多少少大家都是很抵触的,现在我先画一个概念图,大家先看看,就好理解了:

大家看了上面的图了,我不就一条一条的列了。

下面是代码:

/*
 * 创建人:邱慕夏
 * 创建时间:2014-07-18
 * 说明:数据库助手类
 * 版权所有:邱慕夏
 * */
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;

namespace DAL
{
    public class SQLHelper
    {
        private SqlConnection conn = null;
        private SqlCommand cmd = null;
        private SqlDataReader sdr = null;
        public SQLHelper()
        {
            //string connStr = "server=mx;database=newsystem;uid=sa;pwd=123456";
            string connStr = ConfigurationManager.ConnectionStrings["connStr"].ConnectionString;
            conn = new SqlConnection(connStr);

        }
        private SqlConnection GetConn()
        {
            if (conn.State == ConnectionState.Closed)
            {
                conn.Open();

            }
            return conn;
        }
        #region 执行不到参数的增删改SQL语句或存储过程
        /// <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();
                }
                conn.Close();
            }
            return res;
        }
        #endregion

        #region 执行参数的增删改SQL语句或存储过程
        /// <summary>
        /// 执行参数的增删改SQL语句或存储过程
        /// </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;
        }
        #endregion

        #region 执行参数的查询SQL语句或存储过程
        /// <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;
        }
        #endregion

        #region 执行带参数的查询SQL语句或存储过程
        /// <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;
        }
        #endregion

    }

}

如果理解了上图,这些代码就不难理解了,在重构机房的时候,有很多sqlclient的功能函数不清楚,所以,体现了一点:不怕不知道,就怕不知道。

牛腩新闻发布系统--重构SQL Helper,布布扣,bubuko.com

时间: 2024-10-10 18:05:12

牛腩新闻发布系统--重构SQL Helper的相关文章

SQLHelper重构——【牛腩新闻发布系统】

一开始学习机房收费系统的时候,对数据库助手类的抽象和封装,理解的还不是很深刻.再次在牛腩新闻发布系统中看到SQLHelper的重构,感觉对SQLHelper抽象过程印象深刻了许多. 下面简单介绍一下ADO(ActiveX Data Object),首先通过Connection建立与服务器的联接,然后通过Command执行命令,最后通过Recordset对象来操作和查看查询结果.Parameters是Command对象的参数信息,Filed通过Recordset使用,它提供了相应的字段信息.Err

BS领军人物--牛腩新闻发布系统

2014年11月10日,是个难忘的日子,这一天,小编的BS学习开始了,BS的开头,从牛腩新闻发布系统开始,之前学习的内容都是CS方面的知识,软考过后,开始学习BS,接触BS有几天的时间了,跟着牛腩老师敲着牛腩新闻发布系统,感觉棒棒哒,看了前面二十集,发现牛腩老师真的是把党的思想贯彻的淋漓尽致,跟着牛腩老师一起学习,发现了很多让我怦然心动的小知识,每次都让我的小宇宙爆发,现在就把这些小技巧分享给小编的小伙伴.该博文小编主要讲解三个方面的知识.第一:如何让代码整齐美观,第二:代码的注释,第三:连接数

牛腩新闻发布系统---外键约束下如何删除记录

一.为什么使用外键? 查了些资料,八个字"保持完整性.一致性",结合我之前做的重构机房收费系统,我的理解是"防止相关表中数据没有关联而变得孤立,最终导致数据冗余",得出这个结论是上次让贾丽敏帮忙点系统时候我最深刻的感受,因为我的数据库关系图中辣么多张表却没有丝毫关系-- 既然官方解释是"完整性和一致性",就先来说明一下: 对于完整性和一致性,不少人都混为一谈了. 完整性(integrity)更多是针对实际业务来说的,比如说一个职员ID,不能在一个

牛腩新闻发布系统-出错集锦(1)

在学习牛腩新闻发布系统的时候遇到了一些错误,并得出了一些解决方案,分享给大家. 错误一.由于"DAL.SQLHelper.test()"返回 void,返回关键字后面不得有对象表达式E:\提高班\进行中\牛腩新闻发布系统\DAL\SQLHelper.cs2613DAL 代码如下: public void test() { string [email protected]"server=qiwei; database=newssystem; uid=sa; pwd=123456

点滴的积累---牛腩新闻发布系统总结

最近学习状态一直都不错,最近敲完牛腩新闻发布系统后又看了看<培养计划6.0>发现"牛腩新闻发布系统"的作用其实就是一个成语--抛砖引玉.在该新闻发布系统中基本上涉及到了B/S开发所需要具备的知识模块(HTML.Asp.net.XML.JavaScript.CSS.DIV.JQuery.AJAX).通过这个小的系统我的学习也将从C/S转移到B/S上,当然这个小的系统带给我的远远不止这些. 一.重新认识了软件开发的流程. 之前虽然学习过UML.软件工程等也算对系统开发有了初步的

牛腩新闻发布系统(B/S)中的SQLHelper

1.关于SQLHelper的基础知识的说明,简单介绍一下: SqlHelper是一个基于.NET Framework的数据库操作组件.组件中包含数据库操作方法,SqlHelper有很多版本,主要以微软一开始发布的SqlHelper类,后面包含进了Enterprise Library开源包中了.还有一个主要版本是dbhelper.org开源的sqlhelper组件,优点是简洁,高性能,不仅仅支持sqlserver,同时支持sqlserver.oracle.access.Mysql数据库,也是一个开

牛腩新闻发布系统总结

牛腩新闻发布系统,我用了22天才完成,从时间上来说,我做的好像有点久哎! 不过,从刚刚开始接触牛腩发布系统的时候,并没有那种非常难或者说感觉非常"高大上"的感觉.感觉的是非常熟悉,或者说似曾相识. 从开发过程来说,牛腩老师按照我们软件的基本开发流程开始讲解.从文档的编写入手,因为刚刚做完机房,所以对于软件开发的流程,感觉非常亲切.做完文档后,老师开始了数据库的讲解,这和我们机房的数据库基本上没差啊!而且比机房数据库简单很多,虽然不能说运用自如,但至少感觉上熟悉和简单. 之后是SQLHe

【牛腩新闻发布系统】——总结

历时20来天的牛腩新闻发布系统终于长大了,本想一气呵成,再来一个华丽的总结.中途的一个毕业答辩,搁置了两三天,大大降低了小编的情趣,赶着进度来办事.不料再一次应了米老师的那就话:你要是想赶进度,永远都赶不上.知识是靠点点滴滴的积累. 成长记录一:界面的美观 从牛老师整个录制的视频,无不体现他的那种精益求精的精神,为了那1px 牛老师反复修改,换着浏览器来测试,只为这个网站更加的完美,兼容各个浏览器.返回来看自己的设计的页面,谈不上 perfect,也谈不上good,只能说just so so .

牛腩新闻发布系统——用例图知识,温故知新

引言 牛腩新闻发布系统看起来很有feel,一条线的感觉,毕竟,这是一个系统实现的教程,包含了各种细节,虽然只是看了10集左右,但是深深的被牛腩老师的讲解思路带进去了,尤其是一些以前学习的过程中忽略的细节,米老师说过,眼下学习的知识,后续的学习中还会遇到.真的是这样,学习就是一个圈,循环这个特性专门用来对我们以往的学习效果给出评定,并给出我们查漏补缺的机会. 正文 牛腩视频开篇老师就带领我们画了这个系统的用例图,于是趁这个机会,我又复习了一遍用例图中的几种关系: 关联(association) 包