.Net之路(五)概述SQLHelper

前言

       大家都知道在我们的三层或者使用到数据库的时候,通常都会使用到一个SQLHelper的类。起初在刚开始重构机


收费系统的时候,就是在遇到相同的代码的时候就想起来去抽象成类。这里想跟大家分享一个这个我起码是现在遇


到的堪称完美的SQLHelper类了。

要点

1.构造函数的使用

构造函数的使用来定义公共的数据库连接对象。

         2.重载

重载的使用使得可以用的统一的方法来处理只是不同类型的数据。

          3.方法

               尽管这些只是简单的方法,但是这些方法的使用让你使这个类看起来是如此的干净、毫无赘余感。真正体现

了代码的复用啊!
     

代码 

/*
 * 创建人:陈方林
 * 创建时间:2013-6-12 14:55
 * 说明:SQL Helper类
 * 版权所有:*******
 */
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

//导入所需命名空间
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
namespace DAL
{

    public class SQLHelper
    {

        //通过构造函数来实例化所需的ADO对象
        private SqlConnection sqlconn = null;
        private SqlCommand sqlcmd = null;
        private SqlDataReader sdr = null;

        /// <summary>
        /// 将连接数据对象封装到构造函数中
        /// </summary>
        public SQLHelper ()
        {

          //连接数据库的字符串(配置文件的使用)
           String connStr = ConfigurationManager .ConnectionStrings["connStr"].ToString ();

             //连接数据库对象
           sqlconn = new SqlConnection(connStr);

        }

        /// <summary>
        /// 得到连接数据库对象,抽象连接的过程
        /// </summary>
        /// <returns>返回一个连接数据对象</returns>
        private SqlConnection GetConn()
        {

            //判断现行数据库连接状态来判断是否执行数据连接
            if (sqlconn.State == ConnectionState.Closed)
            {
                sqlconn.Open();
            }
            return sqlconn;
        }

        /// <summary>
        /// 执行传入增 删 改的SQL语句与参数组
        /// </summary>
        /// <param name="strsql">传入增 删 改 SQL语句</param>
        /// <param name="paras">传入的参数数组</param>
        /// <param name="cmdtype">命令类型</param>
        /// <returns>返回受影响的行数</returns>
        public int ExecuteNonQuery(string strsql, SqlParameter[] paras, CommandType cmdtype)
        {
            //定义int类型的变量
            int res;

            //using语句执行SQL语句
            using (sqlcmd=new SqlCommand (strsql,GetConn ()))
           {
               sqlcmd.CommandType = cmdtype;
               sqlcmd.Parameters.AddRange (paras);
               res =sqlcmd.ExecuteNonQuery ();

           }

            return res;
        }       


        /// <summary>
        /// 该方法执行传入sql语句
        /// </summary>
        /// <param name="sql">传入的SQL语句</param>
        /// <param name="cmdtype">执行的命令类型</param>
        /// <returns>返回执行的记录行数</returns>
        public  int ExecuteNonQuery (string sql ,CommandType cmdtype )
        {
            //定义存储返回行数的变量
            int res ;
            //try catch语句实施查询并在查询结束后,关闭数据库连接
            try
            {
              
                //将SQL语句与连接对象传入执行查询对象
                sqlcmd = new SqlCommand(sql, GetConn ());

                //执行查询的数据库操作类别
                sqlcmd.CommandType = cmdtype;


                //执行查询
                sqlcmd.ExecuteNonQuery();

                //返回查询结果
                res = sqlcmd.ExecuteNonQuery();
                return res;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                //判断现行数据连接状态来改变数据库状态
                if (sqlconn.State == ConnectionState.Open)
                {

                    sqlconn.Close();

                }
            }               
        }


        /// <summary>
        /// 该方法执行传入的SQL语句
        /// </summary>
        /// <param name="cmdtext">传入的SQL语句或者需要执行的存储过程</param>
        /// <param name="cmdtype">执行的命令类型</param>
        /// <returns>返回DataTable类型的数据</returns>
        public DataTable ExecuteQuery(string cmdtext,CommandType cmdtype)
        {

            //实例化datatable对象
            DataTable dt = new DataTable();                

            //传入需要执行的SQL语句与连接数据库对象
            sqlcmd = new SqlCommand(cmdtext , GetConn());

            //定义执行的类型
            sqlcmd.CommandType = cmdtype;

            using (sdr=sqlcmd.ExecuteReader (CommandBehavior .CloseConnection ))
            {

                //将查询结果加载到dt对象中
                dt.Load(sdr);           
 
            }                         
            
            //返回查询结果
            return dt;
        }


        /// <summary>
        /// 执行传入的SQL语句及参数组
        /// </summary>
        /// <param name="sql">传入的SQL语句</param>
        /// <param name="paras">参数数组</param>
          /// <param name="cmdtype">执行的命令类型</param>
        /// <returns></returns>
        public DataTable ExecuteQuery(string sql,SqlParameter [] paras,CommandType cmdtype)
        {

            //实例化datatable对象
            DataTable dt = new DataTable();

            //实例化数据库执行对象
            SqlCommand sqlcmd = new SqlCommand();

           //需要执行数据库操作的类别
            sqlcmd.CommandType = cmdtype;

            //执行SQL语句
            //sqlcmd = new SqlCommand(sql, GetConn ());
            sqlcmd.Connection = GetConn();
            sqlcmd.CommandText = sql;

             //传入parameter参数组
              sqlcmd.Parameters.AddRange(paras);
           

            //使用using来实现数据库的关闭与打开
            using (sdr=sqlcmd.ExecuteReader (CommandBehavior .CloseConnection  ))
            {

                //将查询结果加载到dt对象中
                dt.Load(sdr);

            }
            //返回查询结果
            return dt;
        }        
        
    }     
}


posted @ 2013-06-19 21:18  陈方林  阅读(202)  评论(0编辑  收藏  举报