封装SqlHelper

  

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;

namespace Student_MI
{
    /// <summary>
    /// 数据库助手类
    /// </summary>
  public   class SqlHelper
    {
        private SqlConnection conn = null;//表示一个到 SQL Server 数据库的打开的连接
        private SqlCommand    cmd = null; //表示要对 SQL Server 数据库执行的一个 Transact-SQL 语句或存储过程
        private SqlDataReader sdr = null; //提供一种从 SQL Server 数据库读取行的只进流的方式
        /// <summary>
        /// 连接数据库
        /// </summary>
        public SqlHelper()
        {
            string connStr = "Data Source=.;Initial Catalog=StudentManager;Integrated Security=True";
            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="cmdText">增删改SQL语句或存储过程</param>
        /// <param name="ct">命令类型</param>
        /// <returns></returns>
        public int ExecuteNonQuery(string cmdText, CommandType ct)// CommandType命令类型
        {
            int res;
            try
            {
                cmd = new SqlCommand(cmdText, GetConn());//向打开的数据库中插入执行命令
                cmd.CommandType = ct;       //设置要执行命令的类型
                res = cmd.ExecuteNonQuery();//执行增删查改用到的方法,返回受影响的行数,是一个整数类型
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (conn.State == ConnectionState.Open)//判断连接是否处于打开状态
                {
                    conn.Close();
                }
            }
            return res;
        }

        /// <summary>
        ///  执行带参数的增删改SQL语句或存储过程
        /// </summary>
        /// <param name="cmdText">增删改SQL语句或存储过程</param>
        /// <param name="ct">命令类型</param>
        /// <returns></returns>
        public int ExecuteNonQuery(string cmdText, SqlParameter[] paras, CommandType ct)
        {
            int res;
            try
            {
                using (cmd = new SqlCommand(cmdText, GetConn()))
                {
                    cmd.CommandType = ct;
                    //cmd.Parameters的Add方法是增加一个参数,增加多个参数的的时候使用一个foreach循环而已  将指定的 SqlParameter 对象添加到 SqlParameterCollection 中
                    //cmd.Parameters的AddRange方法是增加一个参数的数组  将值数组添加到 SqlParameterCollection 的末尾
                    cmd.Parameters.AddRange(paras);
                    res = cmd.ExecuteNonQuery();//执行增删查改用到的方法,返回受影响的行数,是一个整数类型
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return res;
        }

        /// <summary>
        ///  执行查询SQL语句或存储过程
        /// </summary>
        /// <param name="cmdText">查询SQL语句或存储过程</param>
        /// <param name="ct">命令类型</param>
        /// <returns>返回DataTable对象</returns>
        public DataTable ExecuteQuery(string cmdText, CommandType ct)
        {
            DataTable dt = new DataTable();
            cmd = new SqlCommand(cmdText, GetConn());
            cmd.CommandType = ct;
            try
            {
                using (sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection))
                {
                    dt.Load(sdr);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (conn.State == ConnectionState.Open)
                {
                    conn.Close();
                }
            }
            return dt;
        }

        /// <summary>
        ///  执行带参数的查询SQL语句或存储过程
        /// </summary>
        /// <param name="cmdText">查询SQL语句或存储过程</param>
        /// <param name="paras">参数集合</param>
        /// <param name="ct">命令类型</param>
        /// <returns></returns>
        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;
        }
  }
}