zoukankan      html  css  js  c++  java
  • .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;
            }        
            
        }     
    }
    


  • 相关阅读:
    正态分布与中心极限定理
    超几何分布与二项分布及其期望
    cf492E. Vanya and Field(扩展欧几里得)
    ZR#317.【18 提高 2】A(计算几何 二分)
    小米OJ刷题日志
    cf519D. A and B and Interesting Substrings(前缀和)
    cf519C. A and B and Team Training(找规律)
    BZOJ2118: 墨墨的等式(最短路 数论)
    Service生命周期图
    python2.7中使用mysql (windows XP)
  • 原文地址:https://www.cnblogs.com/guziming/p/4232732.html
Copyright © 2011-2022 走看看