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

  一开始学习机房收费系统的时候,对数据库助手类的抽象和封装,理解的还不是很深刻。再次在牛腩新闻发布系统中看到SQLHelper的重构,感觉对SQLHelper抽象过程印象深刻了许多。

下面简单介绍一下ADO(ActiveX Data Object),首先通过Connection建立与服务器的联接,然后通过Command执行命令,最后通过Recordset对象来操作和查看查询结果。Parameters是Command对象的参数信息,Filed通过Recordset使用,它提供了相应的字段信息。Error在Connection联接的过程中,提供了错误信息。

下面是SQLHelper的源码和一些我查询后添加的注释,希望能对大家有些帮助。

  

<span style="font-size:18px;">/*
 * 创建人:王美
 * 创建时间:2015年1月21日10:42:16
 * 说明:数据库的助手类
 * 版本所有:王美
 */

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;//System.Configuration 命名空间包含提供用于处理配置数据的编程模型的类型。

//进行测试数据库连接
using System.Data;//提供对ADO结构类的访问
using System.Data.SqlClient;//命名空间为 SQL服务器.NET Framework 数据提供程序。

namespace DAL
{
    public class SQLHelper
    {

        private SqlConnection conn = null;//联接为空
        private SqlCommand cmd = null;//命令为空
        private SqlDataReader  sdr = null;//表示用于填充 DataSet 和更新 SQL Server 数据库的一组数据命令和一个数据库连接。

        //SQLHelper构造函数
        public SQLHelper()
        {
            //提供对客户端配置文件应用程序的访问
            string connStr = ConfigurationManager.ConnectionStrings["connStr"].ConnectionString ;
            conn = new SqlConnection(connStr);//实例化联接

        }
        //sqlhelper数据库打开的联接
        private SqlConnection GetConn()
        {
            if (conn.State == ConnectionState.Closed)//如果当前数据源的状态是关闭
            {
                conn.Open();//打开联接
            }

            return conn;
        }

        /// <summary>
        /// 执行不带参数的增删改SQL语句或存储过程
        /// </summary>
        /// <param name="cmdText">增删改SQL语句或存储过程</param>
        /// <param name="ct">命令类型</param>
        /// <returns></returns>
        public int ExecuteNonQuery(string cmdText, CommandType ct)
        {
            //定义数据库定义字符串
            // 初始化SQlConnection的新实例,建立打开数据库的连接。
            int res;
            try
            {
                cmd = new SqlCommand(cmdText, GetConn());//实例化命令
                cmd.CommandType = ct;//定义命令类型:存储过程,文本,表
                res = cmd.ExecuteNonQuery();//对联接执行的T-SQL语句并返回受影响的行数
            }
            catch (Exception ex)
            {

                throw ex;
            }
            finally
            {
                if (conn.State == ConnectionState.Open)//如果联接的状态关闭了就将联接打开
                {
                    conn.Close();
                }

            }
            return res;
        }

        /// <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()))//实例化command,包含两个参数sql语句,联接
           {
               cmd.CommandType = ct;
               cmd.Parameters.AddRange (paras);//给command添加参数数组
                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();//实例化datatable
            cmd = new SqlCommand(cmdText, GetConn());//实例化命令command
            cmd.CommandType = ct;//传入命令类型
            using (sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection))//如果关闭关联的datareader则关闭相应的联接
            {
                dt.Load(sdr);//加载SQLDataReader
            }

            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;
        }

    }

}
</span>

  总结:万丈高楼平地起,有代码量才会有抽象和封装,基础才是硬道理。

时间: 02-09

SQLHelper重构——【牛腩新闻发布系统】的相关文章

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

天外有天,人外有人.自我进提高班以来,一直都在考虑,先前重构机房的时候,看到别人在D层加了SQL Helper,就一定要学者加上玩玩,等做完了以后,进行下一个阶段牛腩的时候,又看到了人家建的SQL Helper,不觉感慨,跟人家比,人家就是我的老师! 闲话就不多说了,进行正式的话题:如何写好SQL Helper?从宏观上讲,SQL Helper是完全体现了面向对象的抽象和封装的思想的.它对重复代码抽取出来,进行抽象,抽象就是为了封装,提高了代码的复用. 那么就该讨论怎么写的问题.如果我先上来给大

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

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

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

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

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

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

牛腩新闻发布系统总结——网站发布和分页制作

牛腩新闻发布系统的视频看了将近半个月的时间,今天成功地把它发布了,哈哈.第一次看教学视频看得这么专注,都不带走思的,很不错.给小牛老师赞一个,嘿嘿! 言归正传,每学完一个阶段,最重要的就是总结,所以就允许我以倒序的形式,颗粒归仓吧! 牛腩新闻发布系统的发布 参考博文: win7下IIS的安装和配置 http://www.jb51.net/article/29787.htm VS2010网站发布详解 http://wanghaitaoboke.blog.163.com/blog/static/17

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

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

牛腩新闻发布系统开发流程

牛腩新闻发布系统·流程 学习,增强信心,收获快乐. 看<牛腩新闻发布系统>给我最大的感触就是:牛腩老师擅于规划.正是这种规划,使得整个项目,不急不慢,有条不紊地顺序进行.整体观览,酣畅淋漓,行云流水,一气呵成. 一.     下面对整个项目做开发概览: 1.        集 1.1列举软件 系统开发使用过程中需要的软件 1.2安装软件 可根据需要,阶段性安装:也可在开发之初进行全面安装,稍有遗漏,后期补安 2.   集 2.1写<系统设计说明书> 基本内容: (一)  系统介绍:

牛腩新闻发布系统笔记——怎么写CSS

根据这牛腩学习敲新闻发布系统已经有一段时间了,挺佩服牛腩的,讲那么多东西,我听着也不觉得枯燥,反而有种,一不留神就会错过很多东西的感觉,所以有些地方也是重复又重复的在看. 这篇博客就总结总结小编在学习牛腩新闻发布系统的时候一些笔记.可能知识还比较原生态,but who cares.现在先提炼出来,以后慢慢的体会和升华吧. 牛腩一部分可以说是和机房相似,也是让我从.net到c#的一个过渡.中间一部分就是讲div +css了.里面的知识说多也不多的,根据不同的需求,它又有各种变形和组合,这加起来就有

牛腩新闻发布系统——真假分页

牛腩新闻发布系统已近尾声,牛老师重磅推出真假分页作为压轴,足以见得分页的重要性.我们就一起看一下真假分页的实现以及各自的特点. 一.分页简介 当我们显示足够大的数据量时,所有数据显示在一页上,会造成不必要的麻烦,本着为用户服务的态度,我们往往采用分页显示的处理办法.分页主要分为真分页与假分页. 假分页: 从数据库一次性取出所有数据绑定到控件上,再将所有数据根据每页显示记录条数进行分页.当数据量 比较大时,这种分页方法会造成查询速度, 使用户体验度降低,但是跳页速度较快. 真分页:在执行查询操作的