一步一步写自己的SqlHelper类库

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

前言:

一开始不懂SqlHelper是什么,以为是新东西。第一遍大量的查资料,在csdn上找到很多人写好的SqlHelper类,发现每个人写的很像,但又都不一样,找了一个能用的上的,敲了一遍别人的代码,中间遇到很多不懂的语句,一点点的抠。整体下来,还是很朦胧!

后来,查到这个系列博客,打通了在SqlHelper的认知全貌!

ADO.net是.NET 平台的数据访问编程模型。由于存在多种数据库,为了能够用统一访问各种数据库,出现ADO.Net

连接不同的数据库,要引用对应的类库

每种对应类库中都有四个核心对象:很像老鼠偷玉米的过程

Connection:连接数据库------------老鼠队伍的先锋部队负责找到玉米地

Command:在数据库中查询----------老鼠队伍的主力部队负责将玉米棒子从植物上掰下来

DataAdapter:建立数据库与显示数据对象之间的桥梁-----------老鼠队伍的运输部队将玉米运回洞里的粮仓里

DataSet:将数据拿出来放到用户看的见的外观空间里-----------老鼠队伍的后勤部队将粮仓里玉米做熟了分给各个小老鼠

增加了SQLhelper作用:将所有关于数据库的操作单独写一个类中,在走不同的业务时都通过调用这个类来访问数据库,提高代码的复用性。SQLhelper是一个组件!
在C#中有组件和控件

控件:可视化对象(比如用户名的输入框,密码输入框)--------控件的面对对象是人
组件:是对象,需要容器(比如SqlHelper类库)-------------------组件的面对对象是编程中的代码

编写满足机房用的SqlHelper类

namespace MySqlHelper
{
    /// <summary>
    /// SqlHelper create by zhaofen 2018-8-29
    /// </summary>
    class SqlHelper
    {
        private string strConn = null;
        private SqlConnection Conn = null;
        private SqlCommand Cmd = null;
        private SqlDataReader SqlSdr = null;

        public SqlHelper()
        {
            //利用反射连接数据库
            strConn = ConfigurationManager.ConnectionStrings["strConn"].ConnectionString;
            //strConn = "Data Source=Rancho; Initial Catalog=charge_sys;User Id=sa;Password=123456";
            Conn = new SqlConnection(strConn);
        }

        /// <summary>
        /// 打开数据库
        /// </summary>
        /// <returns>sqlConnection</returns>
        private SqlConnection GetConn()
        {
            if (Conn.State != ConnectionState.Open)
            {
                try
                {
                    Conn.Open();
                }
                catch (Exception ex)
                {
                    Conn.Dispose();//没有成功打开,释放掉资源,不能不成功还占用资源
                    throw new Exception("打开数据库失败!" + ex.Message);
                }
            }
            return Conn;
        }

        /// <summary>
        /// 执行不带参数的增删改操作
        /// </summary>
        /// <param name="CmdText">执行的SQL语句或存储过程</param>
        /// <param name="CmdType">语句类型</param>
        /// <returns>返回增删改的操作数</returns>
        public int ExecuteNonQuery(string CmdText,CommandType CmdType)
        {
            //数据库连接语句
            int res;
            try
            {
                Cmd = new SqlCommand(CmdText, GetConn());
                Cmd.CommandType = CmdType;
                res = Cmd.ExecuteNonQuery();
            }
            catch (Exception ex)
            {

                throw ex;
            }
            finally
            {
                if (Conn.State==ConnectionState.Open)
                {
                    Conn.Close();
                }
            }
            return res;
        }


        /// <summary>
        /// 执行带参数的增删改操作
        /// </summary>
        /// <param name="CmdText">执行的SQL语句或存储过程</param>
        /// <param name="parameters">参数</param>
        /// <param name="CmdType">(SQL语句或存储过程)的类型</param>
        /// <returns>返回增删改的操作数(受影响的行数)</returns>
        public int ExecuteNonQuery(string CmdText,SqlParameter[] parameters,CommandType CmdType)
        {
            int res;
            try
            {
                Cmd.Parameters.AddRange(parameters);
                Cmd = new SqlCommand(CmdText, GetConn());
                Cmd.CommandType = CmdType;
                res = Cmd.ExecuteNonQuery();
            }
            catch (Exception ex)
            {

                throw ex;
            }
            finally
            {
                if (Conn.State == ConnectionState.Open)
                {
                    Conn.Close();
                }
            }
            return res;
        }

        /// <summary>
        /// 执行不带参数的查询操作
        /// </summary>
        /// <param name="CmdText">执行的SQL语句或存储过程</param>
        /// <param name="CmdType">(SQL语句或存储过程)类型</param>
        /// <returns>查询后的数据</returns>
        public DataTable ExecuteQuery(string CmdText,CommandType CmdType)
        {
            DataTable dt = new DataTable();
            using (SqlSdr = Cmd.ExecuteReader(CommandBehavior.CloseConnection))
            {
                Cmd = new SqlCommand(CmdText, GetConn());
                Cmd.CommandType = CmdType;
                dt.Load(SqlSdr);
            }
            return dt;
        }

        /// <summary>
        /// 执行带参数的查询
        /// </summary>
        /// <param name="CmdText">执行的SQL语句或存储过程</param>
        /// <param name="parameters">(SQL语句或存储过程)类型</param>
        /// <param name="CmdType"></param>
        /// <returns>查询后的数据</returns>
        public DataTable ExecuteQuery(string CmdText,SqlParameter[]  parameters, CommandType CmdType)
        {
            DataTable dt = new DataTable();
            using (SqlSdr=Cmd.ExecuteReader(CommandBehavior.CloseConnection))
            {
                Cmd = new SqlCommand(CmdText, GetConn());
                Cmd.CommandType = CmdType;
                Cmd.Parameters.AddRange(parameters);
                dt.Load(SqlSdr);
            }
            return dt;
        }
    }
}

参考资料

一步步写自己SqlHelper类库(一):ADO.NET简介

一步步写自己SqlHelper类库(二):.NET Framework 数据提供程序

一步步写自己SqlHelper类库(三):连接字符串

一步步写自己SqlHelper类库(四):Connection对象

一步步写自己SqlHelper类库(五):Command对象

一步步写自己SqlHelper类库(六):DataAdapter对象

一步步写自己SqlHelper类库(七):DataSet对象

ADO.NET(完整修改和查询、实体类,数据访问类)

猜你喜欢

转载自blog.csdn.net/zhaofen_7/article/details/82182880
今日推荐