连接数据库之重构sqlhelper

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jerry11112/article/details/82810317

前言

数据库的连接非常重要,以前对于数据库的连接都是照着敲,今天总结了一下,发现可以完全的背着敲下连接数据库的所有代码!总结可以让你的思路满满的变得清晰,接下来一起来看看我的总结吧!

连接数据库

在这里插入图片描述

增删改:

思想:我们做完数据库的增删改是否成功,需要我们进行判断,那么微软就给出了ExecuteNonQuery这个鬼东西,根据他的返回值我们可以对我们的操作进行判断是否成功!如果返回的值大于0,那么就代表操作成功了,否则操作失败!

    public class SqlHelper
    {
        public int test()
        {
            //第一步,连接数据库
            string connstr = "server=.;database=newssystem;USER ID=sa;pwd=123456";//无论是USER ID还是uid 还是userid都是对的
            SqlConnection conn = new SqlConnection(connstr);
            conn.Open();
            //第二步,调用sql语句

            string sql = "Insert into caregory(name) values('sdfasfa');";
            SqlCommand cmd = new SqlCommand(sql,conn);
            int res = cmd.ExecuteNonQuery();
            conn.Close();            
            //第三步,返回值          
            return res;                   
        }
    }

上面的代码就是一个简单的测试,亲测完全成功,但是我们做的程序是面向对象的,当创建多个这样的方法时候,代码就会冗余,而且当我们修改了我们数据库的用户名或者密码的时候,我们就需要修改我们的类了,这违背了开发封闭原则,所以我们把数据库的密码和用户名放在配置文件中!下面是进一步的重构!

     public class SQLHelper
    {
        private SqlConnection conn = null;
        private SqlCommand cmd = null;
        private SqlDataReader sdr = null;
  public SQLHelper()
        {
            string connStr = ConfigurationManager.ConnectionStrings["connStr"].ConnectionString;
            conn = new SqlConnection(connStr);
        }
        private SqlConnection GetConn()
        {
            if (conn.State == ConnectionState.Closed)
            {
                conn.Open();
            }
            return conn;
        }

        /// <summary>
        /// 执行不带参数的sql增删改语句
        /// </summary>
        /// <param name="sql">要执行的sql增删改语句</param>
        /// <returns></returns>
        public int ExecuteNonQuery(string sql)
        {
            int res;
            using (cmd = new SqlCommand(sql, GetConn()))   //using让我们的数据库在连接完会自动关闭
            {
                res = cmd.ExecuteNonQuery();
            }
            return res;
        }
  }

查:

它与增删改有一点不一样,因为增删改我们知识单单的判断成不成功就行了,但是我们的查是要将数据库中表中的具体的内容读出来! 它对应的是ExecuteQuery!其中需要Execute Reader将表中的数据一条一条的读出来!

        /// <summary>
        /// 执行不带参数的sql查询语句
        /// </summary>
        /// <param name="sql">要执行的sql语句</param>
        /// <returns></returns>
        public DataTable ExecuteQuery(string sql)
        {
            DataTable dt = new DataTable();
            cmd = new SqlCommand(sql, GetConn());
            using (sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection))  //cmd.ExecuteReader(CommandBehavior.CloseConnection)返回的是一个SqlDataReader对象!
            {
                dt.Load(sdr);  //加载表中的内容到datatable
            }
            return dt;
        }

接下来对CommandBehavior.CloseConnection做一些解释:

CommandBehavior.CloseConnection解决了流读取数据模式下,数据库连接不能有效关闭的情况。当某个XXXDataReader对象在生成时使用了CommandBehavior.CloseConnection,那数据库连接将在XXXDataReader对象关闭时自动关闭。
而CommandBehavior.CloseConnection的功能恰好就是为了避免类似的尴尬境地,它能够保证当SqlDataReader对象被关闭时,其 依赖的连接也会被自动关闭。

这里解释的比较简单,我是看了一篇博客之后,猜彻底明白了CommandBehavior.CloseConnection是怎么保证数据库关闭的!
博客连接:https://www.cnblogs.com/agian/articles/1648835.html

后记

原本以为自己已经很明白了一些东西,所以就没有进行总结,但是当试图给别名人讲明白的时候,发现我必须总结!总结过后一定会有不一样的感觉!

猜你喜欢

转载自blog.csdn.net/jerry11112/article/details/82810317