牛腩细节(SQLHelper再识)

看着并跟着敲了不少的牛腩新闻发布系统,越来越感觉编程的智慧,为了优化代码,各种调用、创建新方法,减少代码量,让人佩服的不行不行的。特地分享一下最终的代码。

namespace DAL
{
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,CommandType ct)
    {
        int res = 0;
        try
        {
            cmd = new SqlCommand(sql, 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="sql">SQL查询语句或存储过程</param>
    /// <returns></returns>
    public DataTable ExecuteQuery(string sql, CommandType ct)
    {
        DataTable dt = new DataTable();
        cmd = new SqlCommand(sql, GetConn());
        cmd.CommandType = ct;
        using (sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection))
        {
            dt.Load(sdr);
        }
        //sdr = cmd.ExecuteReader();
        //dt.Load(sdr);
        //sdr.Close();
        //conn.Close();
        return dt;
    }
    /// <summary>
    /// 执行带参数的SQL查询语句或存储过程
    /// </summary>
    /// <param name="sql">SQL查询语句</param>
    /// <param name="paras">参数集合</param>
    /// <returns></returns>
    public DataTable ExecuteQuery(string sql, SqlParameter[] paras,CommandType ct)
    {
        DataTable dt = new DataTable();
        cmd = new SqlCommand(sql, GetConn());
        cmd.CommandType = ct;
        cmd.Parameters.AddRange(paras);
        using (sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection))
        {
            dt.Load(sdr);
        }
        return dt;
    }

    /// <summary>
    /// 执行带参数的SQL增删改语句或存储过程
    /// </summary>
    /// <param name="sql">SQL增删改语句</param>
    /// <param name="paras">参数集合</param>
    /// <returns></returns>
    public int ExecuteNonQuery(string sql, SqlParameter[] paras,CommandType ct)
    {
        int res;
        using (cmd = new SqlCommand(sql, GetConn()))
        {
            //cmd.Parameters.Add(new SqlParameter("@caName","牛腩测试"));
            cmd.CommandType = ct;
            cmd.Parameters.AddRange(paras);
            res = cmd.ExecuteNonQuery();
        }
        return res;
    }
}
}

一共四种方法,两种带参,两种不带参方法,不论存储过程还是SQL语句都可以调用,现在想起来比我机房重构厉害多了,我当时没办法只能为了存储过程又新建了一个专门给存储过程的方法,麻烦的不得了。另外还有创建的实体类,类中新建一个方法,这样实例化就不用实例化整个类,只需要实例化这个方法,方法中放入你想要实例化的参数就可以,真是重新认识了SQLHelper。

猜你喜欢

转载自blog.csdn.net/q290994/article/details/79440063