封装一个SQLHelper类的目的是使用ADO.NET连接数据库的时候,减少重复代码。利用面向对象的思想对连接数据库需要的代码进行封装为一个SQLHelper类。执行数据操作的时候只需要将SQL语句通过参数的形式传入SQLHelper类,可以大大的减少重复代码量。

SQLHelper类
已执行带参的SQL 语句为例

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;

namespace DAL
{
    public class SQLHelper
    {
        //声明连接数据库类类型参数conn初值为null
        private SqlConnection conn = null;
        //声明命令类类型参数cmd初值为null
        private SqlCommand cmd = null;
        //声明数据读取器类类型参数sdr初值为null
        private SqlDataReader sdr = null;

        /// <summary>
        /// SQLHelper的构造方法,实例化SQLHelper类时同时实例化数据库连接对象
        /// </summary>
        public SQLHelper()
        {
            //接收配置文件中的连接数据库语句
            string connStr = ConfigurationManager.ConnectionStrings["connStr"].ConnectionString;
            //实例化数据库连接对象
            conn = new SqlConnection(connStr);
        }

        /// <summary>
        /// 保证连接打开
        /// </summary>
        /// <returns></returns>
        private SqlConnection GetConn()
        {
            //如何数据库连接为关闭状态
            if (conn.State ==ConnectionState.Closed)
            {
                //打开数据库连接
                conn.Open();
            }

            return conn;
        }


       

        /// <summary>
        /// 执行带参的SQL增删改语句
        /// </summary>
        /// <param name="sql">SQL增删改语句</param>
        /// <param name="paras">参数集合</param>
        /// <returns></returns>
        public int ExecuteNonQuery(string sql, SqlParameter[] paras)
        {
            int res;
            //using执行完时释放()中的内容,相应的数据库连接也将关闭
            //使用查询的文本和 System.Data.SqlClient.SqlConnection 初始化 System.Data.SqlClient.SqlCommand
            //类的新实例
            using (cmd = new SqlCommand(sql, GetConn()))
            {
                //获取参数集合
                cmd.Parameters.AddRange(paras);

               // 对连接执行 Transact-SQL 语句并返回受影响的行数。
                res = cmd.ExecuteNonQuery();
            }

            //返回受影响行数
            return res;

        }
        

        /// <summary>
        /// 执行带参数的SQL查询语句
        /// </summary>
        /// <param name="sql">SQL查询语句</param>
        /// <param name="paras">参数集合</param>
        /// <returns></returns>
        public DataTable ExecuteQuery(string sql,SqlParameter[]paras )
        {
            //初始化 System.Data.DataTable 类的新实例。
            DataTable dt = new DataTable();

            //使用查询的文本和 System.Data.SqlClient.SqlConnection 初始化 System.Data.SqlClient.SqlCommand
            //类的新实例
            cmd = new SqlCommand(sql, GetConn());

            //在Parameters末尾添加值数组
            cmd.Parameters.AddRange(paras);

            //using执行完时释放()中的内容,相应的数据库连接也会关闭
            using (sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection))
            {
                //通过所提供的 System.Data.IDataReader,用某个数据源的值填充 System.Data.DataTable。 如果 System.Data.DataTable
                //     已经包含行,则从数据源传入的数据与现有行合并。
                dt.Load(sdr);
            }
            //返回查询结构
            return dt;
        }
    }

    
}