SQLHelper助手

Posted xiashulin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQLHelper助手相关的知识,希望对你有一定的参考价值。

通过”瘦身行动“,现在的代码是不是比第一版代码清晰了很多呢?但这还不是最后的结果。有的人会提出这样的问题:把连接字符串写在SQLHelper类中,如果我现在要更换数据库,那岂不是要对SQLHelper助手类进行更改,这样似乎不符合我们”开放扩展,关闭修改“的要求。另外在执行查询过程时需要先关闭SqlDataReader再关闭数据库连接,这样在代码中也出现了重复,能不能再进一步对代码进行改造来解决这两个问题呢?下面我们就上述两个问题对代码进行进一的步改造: 解决更换数据库的问题我们采取的方法是将连接字符串写在配置文件中,具体步骤为:

 1. 双击web层中Web.config文件,配置文件中的相关内容将会出现。

2. 找到<connectionStrings>和</connectionStrings>,在二者之间添加如下内容:<add name=<add name=连接字符串 connectionString ="server=YCH-PC;database=newssystem;uid=sa;pwd=具体的登陆密码"/>

3. 修改SQLHelper类中的相关代码如下:

 

namespace dal

    public class SQLHelper
   
        private SqlConnection conn = null;
        private SqlCommand cmd = null;
        private SqlDataReader sdr = null;
        public SQLHelper()
       
            string strconn = ConfigurationManager.ConnectionStrings["strconn"].ConnectionString;
            conn = new SqlConnection(strconn );
       
 
        private SqlConnection GetConn()
       
            if (conn.State == ConnectionState.Closed)
           
                conn.Open();
           
            return conn;
       
       
        //关闭数据库连接
        private void OutConn()
       
            if (conn.State == ConnectionState.Open)
           
                conn.Close();
           
       
        ///  执行不带参数的增删改SQL语句或存储过程
        public int ExecuteNonQuery(string cmdText, CommandType ct)
       
            int res;
            try
           
                cmd = new SqlCommand(cmdText, GetConn());
                cmd.CommandType = ct;
                res = cmd.ExecuteNonQuery();
           
            catch (Exception ex)
           
                throw ex;
           
            finally
           
                OutConn();
           
            return res;
       
        ///  执行带参数的增删改SQL语句或存储过程
        public int ExecuteNonQuery(string cmdText, SqlParameter[] paras, CommandType ct)
       
            int res;
            try
           
                cmd = new SqlCommand(cmdText, GetConn());
                cmd.CommandType = ct;
                cmd.Parameters.AddRange(paras);
                res = cmd.ExecuteNonQuery();
           
            catch (Exception ex)
           
                throw ex;
           
            finally
           
                OutConn();
           
            return res;
       
 
        ///  执行不带参数的查询SQL语句或存储过程
        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;
       
        ///  执行带参数的查询SQL语句或存储过程
        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;
       
   

 

经过对代码的再次改造,不但代码的重复率大大降低,而且如需更换数据库,只要在配置文件中更改相应的连接字符串就可完。在编写查询(包括带参数的和不带参数的查询方法)方法时,用using方法,在关闭SqlDataReader对象的时候同时关闭与之相关联的数据库连接,避免了try catch语句的使用,代码更加简洁。经过三次改造,SQLHelper助手类的变身就此完成。

以上是关于SQLHelper助手的主要内容,如果未能解决你的问题,请参考以下文章

函数助手的使用

教练助手

腾讯拍拍网 输入密码登陆时 提示参数非法,怎么解决

基于ADO.NET的SqlHelper类

软件需求规格说明书(宿舍小助手)

SqlHelper