设为首页 加入收藏

TOP

SqlHelper重构(一)
2015-07-24 11:04:29 来源: 作者: 【 】 浏览:2
Tags:SqlHelper 重构

在机房重构的时候有用到SqlHelper(点击查看),当时什么都不懂。后来经过不断的使用,开始理解其中的意思。后来发现原来的SqlHelper写的有点繁琐。对于每个操作都需要写两次,来区分是否带参数。这次,重构一版,来改善一下它的缺点。

长度可变参数params

首先,我们来看一下长度可变参数params。举两个例子来说明

第一个

class Program
		    {
		        static void Main(string[] args)
		        {
		            int i = Sum(new int[]{2,87,51,5});
		            Console.WriteLine(i);
		            Console.ReadKey();
		        }
		        static int Sum(int[] sums)
		        {
		            int result = 0;
		            foreach (int i in sums )
		            {
		                result += i;    
		            }
		            return result;
		        }
		    }
执行后返回结果为

?

\

第二个:

?

class Program
		    {
		        static void Main(string[] args)
		        {
		            int i = Sum(2,5,5,5);
		            Console.WriteLine(i);
		            Console.ReadKey();
		        }
		        static int Sum(params int[] sums)
		        {
		            int result = 0;
		            foreach (int i in sums )
		            {
		                result += i;    
		            }
		            return result;
		        }
		    }
执行后返回结果为:

?

\


其中第一个例子中的Sum方法,在声明的时候没有用params修饰符,所以调用的时候需要声明数组。而第二个例子中用了params修饰符,调用的时候,直接输入参数即可。这时就可以来体会一下params的作用了。params将其后所有参数打包,相当于一个数组。如果没有写参数的话,它相当于长度为0的数组。

注:声明params数组时,该数组必须在参数的最后一个,因为它默认会对其后面的所有参数打包。

同理,就可以在SqlHelper的方法中使用params修饰符了。如果有参数,输入参数即可,没有参数就不用输入,相当于长度为0的数组。

使用using()

数据库执行完成后,需要执行conn.close()和cmd.Dispose()操作。在之前的SqlHelper中,是要将这两句代码写出来的。其实还有更好的方法来代替它。就是使用using(),using()方法实现了IDispose接口,也就是说,如果使用using(),它会自动帮助我们执行了conn.close()和cmd.Dispose()操作。下面,看我重构后的SqlHelper

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

namespace DAL
{
    public class SqlHelper
    {
        //app.config文件的继承:

        public static readonly string connstr =
            ConfigurationManager.ConnectionStrings["connstr"].ConnectionString;

        /// 

        /// 执行增删改的SQL语句或存储过程
        /// 

        ///SQL语句或存储过程名称
        ///参数
        /// 返回受影响的行数
        public int ExecuteNonQuery(string cmdText, CommandType cmdType,
            params SqlParameter[] parameters)//在SqlParameter[]前面加上了长度可变参数--params修饰符。

        {
            try
            {   //创建SQL连接
                using (SqlConnection conn = new SqlConnection(connstr))
                {
                    //打开连接
                    conn.Open();
                    //创建SqlCommand,执行SQL指令
                    using (SqlCommand cmd = conn.CreateCommand())
                    {
                        //SQL语句或存储过程名称
                        cmd.CommandText = cmdText;
                        //命令类型
                        cmd.CommandType = cmdType;
                        //添加参数
                        cmd.Parameters.AddRange(parameters);
                        //返回执行结果
                        return cmd.ExecuteNonQuery();
                    }
                }
            }
            catch (Exception ex)
            {
                //抛出异常
                throw new Exception(ex.ToString());
            }
        }


        /// 

        /// 执行对数据库的查操作
        /// 

        ///SQL语句或存储过程
        ///命令类型
        ///参数
        /// 返回查询到的表
        public DataTable ExecuteDataTable(string cmdText, CommandType cmdType,
            params SqlParameter[] parameters)//在SqlParameter[]前面加上了长度可变参数--params修饰符。
        {
            try
            {
                //创建SQL连接
                using (SqlConnection conn = new SqlConnection(connstr))
                {
                    //打开连接
                    conn.Open();
                    //创建SqlCommand,执行SQL指令
                    using (SqlCommand cmd = conn.CreateCommand())
                    {
                        //SQL语句或存储过程名称
                        cmd.CommandText = cmdText;
                        //命令类型
                        cmd.CommandType = cmdType;
                        //添加参数
                        cmd.Parameters.AddRange(parameters);
                        //定义数据集
                        DataSet dataset = new DataSet();
                        //创建数据适配器,执行查询
                        SqlDataAdapter adapter = new SqlDataAdapter(cmd);
                        //填充数据集
                        adapter.Fill(dataset);
                        //获取数据集中的第一个表
                        return dataset.Tables[0];
                    }
                }
            }
            catch (Exception ex)
            {
                //抛出异常
                throw new Exception(ex.ToString());
            }

        }

    }
}
总结:

?

在这次重构中又学到了长度可变参数params和加深了对using()方法的理解。感觉还是蛮不错的。当然,并不见得重构的SqlHelper就多么的好

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇SQL必知必会笔记第二十章管理事务.. 下一篇SparkSQL初步应用(HiveContext使..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Redis 分布式锁全解 (2025-12-25 17:19:51)
·SpringBoot 整合 Red (2025-12-25 17:19:48)
·MongoDB 索引 - 菜鸟 (2025-12-25 17:19:45)
·What Is Linux (2025-12-25 16:57:17)
·Linux小白必备:超全 (2025-12-25 16:57:14)