勿谓今日不学而有来日,勿谓今年不学而有来年。
日月逝矣,岁不我延。

封装自己的ASP.NET SqlHelper类

在前面

SqlHelper类说白了就是一个数据库操作类,里面就是许多数据库操作方法,封装好自己的SqlHelper类可以让我们在对数据库进行操作时大幅减少代码冗余,极大程度的降低的程序的耦合性。这里我选择常用的SqlServer和MySql为例子,封装两个自己的SqlHelper类。

使用类中的方法可以通过实例化对象,使用对象调用类中的方法,但是对于这个类来说,不需要很多对象分别对数据库操作,那样反而降低了性能,所以更好的解决办法是把它写成一个单例,静态类直接调用静态方法。

类中主要封装4大方法和一个连接字符串:

  1. 执行增删改的方法,也就是insert、delete、update,他们的共同点是执行后返回一个值:ExecuteNonQuery()
  2. 执行查询返回单个值的方法:ExecuteScalar()
  3. 执行查询,返回多行多列的方法:ExecuteReader()
  4. 获取DataSet的方法
  5. 连接字符串应该写在应用程序配置文件中,是固定的,只能在构造函数中赋值,不可更改所以要是静态变量并且是只读的。

以上三个方法需要传递sql语句,然而sql语句可能是的动态的也可能是静态的,这需要在方法中做判断,对呀有参数的sql语句,可以使用可变参数, params SqlParametet[] pms

SqlServer数据库操作类

public static class SqlHelper
    {
        //从web.config连接字符串
        private static readonly string SqlConStr = ConfigurationManager.ConnectionStrings["SqlConStr"].ConnectionString;

        //增删改 ExecuteNonQuery()
        /// <summary>
        /// 受影响的行数 inset,delete,update
        /// </summary>
        /// <param name="sql">Sql语句</param>
        /// <param name="pms">可变参数数组</param>
        /// <returns>int</returns>
        public static int ExecuteNonQuery(string sql, params MySqlParameter[] pms)
        {
            using (SqlConnection mySqlCon = new SqlConnection(SqlConStr))
            {
                using (SqlCommand cmd = new SqlCommand(sql, SqlCon))
                {
                    if (pms != null)
                    {
                        cmd.Parameters.AddRange(pms);
                    }
                    SqlCon.Open();
                    return cmd.ExecuteNonQuery();
                }
            }
        }

        /// <summary>
        /// 单行查询 返回结果中的第一行第一列 
        /// </summary>
        /// <param name="sql">Sql语句</param>
        /// <param name="pms">可变参数数组</param>
        /// <returns>object</returns>
        public static object ExecuteScalar(string sql, params SqlParameter[] pms)
        {
            using (SqlConnection SqlCon = new SqlConnection(mySqlConStr))
            {
                using (SqlCommand cmd = new SqlCommand(sql, mySqlCon))
                {
                    if (pms != null)
                    {
                        cmd.Parameters.AddRange(pms);
                    }
                    SqlCon.Open();
                    return cmd.ExecuteScalar();
                }
            }
        }

        /// <summary>
        /// 多行查询
        /// </summary>
        /// <param name="sql">Sql语句</param>
        /// <param name="pms">可变参数数组</param>
        /// <returns>SqlDataReader</returns>
        public static SqlDataReader ExecuteReader(string sql, params SqlParameter[] pms)
        {
            SqlConnection SqlCon = new SqlConnection(SqlConStr);
            using (SqlCommand cmd = new SqlCommand(sql, SqlCon))
            {
                if (pms != null)
                {
                    cmd.Parameters.AddRange(pms);
                }
                try
                {
                    SqlCon.Open();
                    //枚举参数 System.Data.CommandBehavior.CloseConnection 在SqlDataReader使用完毕后,在关闭SqlDataReader的同时会将其内部关联的Connection对象也关闭
                    return cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
                }
                catch//Sql语句错误时关闭连接
                {
                    SqlCon.Close();
                    SqlCon.Dispose();
                    throw;
                }

            }
        }
        /// <summary>
        /// 获取DataSet
        /// </summary>
        /// <param name="sql">Sql语句</param>
        /// <param name="pms">可变参数数组</param>
        /// <returns>DataSet</returns>
        public static DataSet GetDataSet(string sql, params SqlParameter[] pms)
        {
            MySqlConnection SqlCon = new MySqlConnection(SqlConStr);
                using (MySqlCommand cmd = new MySqlCommand(sql, SqlCon))
                {
                if (pms != null)
                {
                    cmd.Parameters.AddRange(pms);
                }
                try
                {
                    SqlCon.Open();
                    SqlDataAdapter dataAdpter = new SqlDataAdapter(cmd);
                    DataSet ds = new DataSet();
                    dataAdpter.Fill(ds);
                    return ds;
                }
                catch//Sql语句错误时关闭连接
                {
                    SqlCon.Close();
                    SqlCon.Dispose();
                    throw;
                }
            }
        }
    }

MySql数据库操作类

.NET中使用MySQL数据库需要到 https://www.mysql.com/products/connector/下载MySql驱动,然后在项目中引用 MySql.Data.DLL文件,才能正常使用MySQL数据库。其他方面与SqlServer大同小异,简单说就是把Sql开头的换做是MySql开头。一下为具体的代码:

public static class MySqlHelper
    {
        //从web.config连接字符串
        private static readonly string mySqlConStr = ConfigurationManager.ConnectionStrings["mySqlConStr"].ConnectionString;

        //增删改 ExecuteNonQuery()
        /// <summary>
        /// 受影响的行数 inset,delete,update
        /// </summary>
        /// <param name="sql">Sql语句</param>
        /// <param name="pms">可变参数数组</param>
        /// <returns>int</returns>
        public static int ExecuteNonQuery(string sql, params MySqlParameter[] pms)
        {
            using (MySqlConnection mySqlCon = new MySqlConnection(mySqlConStr))
            {
                using (MySqlCommand cmd = new MySqlCommand(sql, mySqlCon))
                {
                    if (pms != null)
                    {
                        cmd.Parameters.AddRange(pms);
                    }
                    mySqlCon.Open();
                    return cmd.ExecuteNonQuery();
                }
            }
        }

        /// <summary>
        /// 单行查询 返回结果中的第一行第一列 
        /// </summary>
        /// <param name="sql">Sql语句</param>
        /// <param name="pms">可变参数数组</param>
        /// <returns>object</returns>
        public static object ExecuteScalar(string sql, params MySqlParameter[] pms)
        {
            using (MySqlConnection mySqlCon = new MySqlConnection(mySqlConStr))
            {
                using (MySqlCommand cmd = new MySqlCommand(sql, mySqlCon))
                {
                    if (pms != null)
                    {
                        cmd.Parameters.AddRange(pms);
                    }
                    mySqlCon.Open();
                    return cmd.ExecuteScalar();
                }
            }
        }

        /// <summary>
        /// 多行查询
        /// </summary>
        /// <param name="sql">Sql语句</param>
        /// <param name="pms">可变参数数组</param>
        /// <returns>MySqlDataReader</returns>
        public static MySqlDataReader ExecuteReader(string sql, params MySqlParameter[] pms)
        {
            MySqlConnection mySqlCon = new MySqlConnection(mySqlConStr);
            using (MySqlCommand cmd = new MySqlCommand(sql, mySqlCon))
            {
                if (pms != null)
                {
                    cmd.Parameters.AddRange(pms);
                }
                try
                {
                    mySqlCon.Open();
                    //枚举参数 System.Data.CommandBehavior.CloseConnection 在MySqlDataReader使用完毕后,在关闭MySqlDataReader的同时会将其内部关联的Connection对象也关闭
                    return cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
                }
                catch//Sql语句错误时关闭连接
                {
                    mySqlCon.Close();
                    mySqlCon.Dispose();
                    throw;
                }

            }
        }
        /// <summary>
        /// 获取DataSet
        /// </summary>
        /// <param name="sql">Sql语句</param>
        /// <param name="pms">可变参数数组</param>
        /// <returns>DataSet</returns>
        public static DataSet GetDataSet(string sql, params MySqlParameter[] pms)
        {
            MySqlConnection mySqlCon = new MySqlConnection(mySqlConStr);
                using (MySqlCommand cmd = new MySqlCommand(sql, mySqlCon))
                {
                if (pms != null)
                {
                    cmd.Parameters.AddRange(pms);
                }
                try
                {
                    mySqlCon.Open();
                    MySqlDataAdapter myDataAdpter = new MySqlDataAdapter(cmd);
                    DataSet ds = new DataSet();
                    myDataAdpter.Fill(ds);
                    return ds;
                }
                catch//Sql语句错误时关闭连接
                {
                    mySqlCon.Close();
                    mySqlCon.Dispose();
                    throw;
                }
            }
        }
    }

小结

以上就是我对数据库操作类的封装,它暂时能满足我对数据库操作的需求,在接下来的项目中我将使用本文中所写的SqlHelper来进行数据库操作。

不积跬步无以至千里,不积小流无以成江海。

赞(0)
未经允许不得转载:喋喋不休 » 封装自己的ASP.NET SqlHelper类

评论 抢沙发

评论前必须登录!

 

精品网站

有券无忧电脑壁纸精选