码迷,mamicode.com
首页 > 数据库 > 详细

SqlHelper重构

时间:2015-04-15 21:30:48      阅读:186      评论:0      收藏:0      [点我收藏+]

标签:sqlhelper

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


长度可变参数params

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

第一个

<span style="font-size:18px;"><span style="font-size:18px;">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;
		        }
		    }
</span></span>
执行后返回结果为

技术分享

第二个:

<span style="font-size:18px;">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;
		        }
		    }
</span>
执行后返回结果为:

技术分享


其中第一个例子中的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

<span style="font-size:18px;"><span style="font-size:18px;">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;

        /// <summary>
        /// 执行增删改的SQL语句或存储过程
        /// </summary>
        /// <param name="cmdText">SQL语句或存储过程名称</param>
        /// <param name="parameters">参数</param>
        /// <returns>返回受影响的行数</returns>
        public int ExecuteNonQuery(string cmdText, CommandType cmdType,
            params SqlParameter[] parameters)//在SqlParameter[]前面加上了长度可变参数--params修饰符。</span>

        {
            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());
            }
        }


        /// <summary>
        /// 执行对数据库的查操作
        /// </summary>
        /// <param name="cmdText">SQL语句或存储过程</param>
        /// <param name="cmdType">命令类型</param>
        /// <param name="parameters">参数</param>
        /// <returns>返回查询到的表</returns>
        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());
            }

        }

    }
}
</span></span>

总结:

在这次重构中又学到了长度可变参数params和加深了对using()方法的理解。感觉还是蛮不错的。当然,并不见得重构的SqlHelper就多么的好,不懂的东西。还有很多,以后还要不断的学习来扩从自己。


SqlHelper重构

标签:sqlhelper

原文地址:http://blog.csdn.net/mascf/article/details/45064345

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!