SQLHelper封装

前言:    

    其实如果让我说为什么要封装SqliteHelper这个类,我也说不上具体原因;但是我知道简化了D层的代码,也就是解决了代码冗余的问题,除此外肯定和占用资源也存在一定的关系;借助于VS中内置的方法,我们可以轻而易举的封装针对数据库操作的指令。

public static class SqlHelper
    {
        private static string connStr = ConfigurationManager.ConnectionStrings["sql"].ConnectionString;
        public static int ExecuteNonQuery(string sql, params SqlParameter[] ps)
        {
            using (SqlConnection conn = new SqlConnection(connStr))
            {
                 #region SqlConnection和SqlCommond连接
                SqlCommand cmd = new SqlCommand(sql, conn);
                //SqlCommand cmd = conn.CreateCommand();
                //cmd.CommandText = sql;
                #endregion

                cmd.Parameters.AddRange(ps);
                conn.Open();
                return cmd.ExecuteNonQuery();
            }
        }
        public static object ExecuteScalar(string sql, params SqlParameter[] ps)
        {
            using (SqlConnection conn = new SqlConnection(connStr))
            {
                SqlCommand cmd = new SqlCommand(sql, conn);
                cmd.Parameters.AddRange(ps);
                conn.Open();
                return cmd.ExecuteScalar();

            }
        }
        public static DataTable GetDateTable(string sql, params SqlParameter[] ps)
        {
            using (SqlConnection conn = new SqlConnection(connStr))
            {
                SqlDataAdapter adapter = new SqlDataAdapter(sql, conn);
                DataTable dt = new DataTable();
                adapter.SelectCommand.Parameters.AddRange(ps);
                adapter.Fill(dt);
                return dt;
            }
        }
        #region 执行sql脚本,返回一个SqlDataReader
        public static SqlDataReader ExecuterReader(string sql, params SqlParameter[] ps)
        {
            //sqldataReader在读取数据的时候,独占sqlconnection对象,因此必须是开的状态
            SqlConnection conn = new SqlConnection(connStr);
            SqlCommand cmd = new SqlCommand(sql, conn);
            cmd.Parameters.AddRange(ps);
            conn.Open();
            //CommandBehavior.CloseConnection代表,当sqldatareader释放的时候,顺道把sqlconnection一同释放了
            return cmd.ExecuteReader(CommandBehavior.CloseConnection);

        }
        #endregion

    }

结语:

    最后咱们聊聊为什么要封装成这个样子,我们应该可以看到类中的四个静态方法是依据SqlCommand的三个方法+SQL适配器一个方法进行编写的;

cmd.ExecuteNonQuery返回受影响的行数
cmd.ExecuteScalar()返回结果集中的第一行的第一列
cmd.ExecuteReader()读取结果集中的数据
adapter.Fill(DataTable)填充查询数据到DataTable表中

    解说:也许会有伙伴有疑问,为什么不释放SqlCommand和SqldataReader中的资源,其实没有这个必要,现在的版本中已经能够自动释放它了,我们只需要管sqlConnection就可以了;


评论 29
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值