学习写个Sqlserver的帮助类

前两天上课的内容总结了下,一般在连接层基本就调用那几个类。

一般包括System.Data.SqlClient和System.Data下的SqlConnection,SqlCommand,SqlDataReader这三个类。如果,要想从配置文件中读取的话,还需要System.Configuration。

到底怎么连接我想书上都有,就不写了。写单私货,和老师在上课时讲的不一样的。

方法大家一开始是这么写的

        static string connStr = @"Data Source=.\Test;Initial Catalog=test;Integrated Security=True";
        public static SqlDataReader GetReader(string sql,params SqlParameter[] pars)
        {
            using (SqlConnection conn = new SqlConnection(connStr))
            {
                using (SqlCommand comm = new SqlCommand(sql, conn))
                {
                    comm.Parameters.AddRange(pars);
                    conn.Open();
                    return comm.ExecuteReader(CommandBehavior.CloseConnection);
                }
            }
        }

先获取连接字符串(这里用变量意思一下),然后传SqlParameters数组和sql语句。大多数人也都这么写。但定义参数数组太麻烦了,有好多字,也挺麻烦的。

后来想了想,有没有更好的办法呢。要是能让他自己摘开sql变量多好。于是就写了下面方法

        //拆解sql得到变量数组,返回list<string>类型的Sql变量数组
        private static List<string> GetParamaters(string sql)
        {
            string meat = sql;
            char[] cArray = " ,=()><".ToCharArray();
            for (int i = 0; i < cArray.Length; i++)
            {
                meat = meat.Replace(cArray[i], ‘☆‘);
            }
            List<string> list = meat.Split(‘☆‘).Where(s => s.Contains("@")).ToList();
            list = RemoveRepeatPars(list);
            return list;
        }

原理其实就是,sql变量前后字符毕竟也就那么几个么“ ,=()<>”,然后用一个稀有的字符替换下(比如上面那个小星星),以免破坏变量名。再用string.Split

把他们按照没用的字符截断扔进一个集合里,这样我们把变量前后都打断,再拿出包含‘@‘字符的字符串,这些就都是干净的变量名了。是吧。

不过之前还有一步,就是把重复的变量去掉!(有些时候用update的时候set一个变量where一个变量有可能会重复)

        private static List<string> RemoveRepeatPars(List<string> list)
        {
            for (int i = 0; i < list.Count; i++)
            {
                string s = list[i];
                while (true)
                {
                    if (list.IndexOf(s) != list.LastIndexOf(s))
                        list.RemoveAt(list.LastIndexOf(s));
                    else
                        break;
                }
            }
            return list;
        }

前后索引都不一样的,八成就是重复的。排除之后就剩下纯净的sql参数了!

然后就这么改下原来的方法

        private static List<string> GetParamaters(string sql)
        {
            string meat = sql;
            char[] cArray = " ,=()><".ToCharArray();
            for (int i = 0; i < cArray.Length; i++)
            {
                meat = meat.Replace(cArray[i], ‘☆‘);
            }
            List<string> list = meat.Split(‘☆‘).Where(s => s.Contains("@")).ToList();
            list = RemoveRepeatPars(list);
            return list;
        }

把这两个方法合并,sql的加工就写好了。下面再改下之前的方法

        public static SqlDataReader GetReader(string sql, params object[] pars)
        {
            List<string> list = GetParamaters(sql);//上来就先截成参数集合
            if (list.Count != pars.Length)
            {
                throw new Exception("语句中参数个数与给定参数不相符!");//判断一下sql中的参数是不是和给的参数一样多,万一写错了呢
            }
            using (SqlConnection conn = new SqlConnection(connStr))
            {
                using (SqlCommand comm = new SqlCommand(sql, conn))
                {
                    for (int i = 0; i < pars.Length; i++)//反正两个数组数量一样多,随便选一个直接加就行了
                    {
                        comm.Parameters.AddWithValue(list[i], pars[i]);
                        conn.Open();

                    }
                    return comm.ExecuteReader();
                }
            }
        }

然后就用加params的object[]的数组代替原来的Sqlparameters参数了,这样就方便多了,再也不用定义SqlParameters了

如果下次再要写参数就直接这样写

GetReader(sql,1,"name",0.14,1m)

就好了。就像Console.WriteLine()一样方便(自我感觉)。

时间: 2024-08-29 09:25:44

学习写个Sqlserver的帮助类的相关文章

JavaScript学习总结(十四)——JavaScript编写类的扩展方法

在?J?a?v?a?S?c?r?i?p?t?中?可以使?用?类的p?r?o?t?o?t?y?p?e属性来?扩?展?类的属?性?和?方?法,在实际开发当中,当JavaScript内置的那些类所提供的动态方法和动态属性不满足我们实际开发时,我们就可以通过"prototype"属性给自定义类添加方法和属性或者扩展原有的类中的方法和属性. 一.扩展JavaScript内置类,添加动态方法 语法格式: 类名.prototype.方法名 = function([param1],[param2],.

Liam的C# 学习历程(三):类与对象、继承与多态

在这一次的课程中,我们主要学习了C#中一些关于类的的具体应用和面向对象(OOP)的三大特点:封装(Encapsulation).多态(Polymorphism)和继承(Inheritance).接下来就让我们来实验一下学到的知识. (一)This 关键字 this关键字(又称this指针)是类中所有非静态方法的隐藏指针. 调用this的方法有很多种,首先是在收到与成员变量同名的参数时,使用this可以避免混淆,就像下面过程所演示的: 成员函数SomeMethod收到了一个与成员变量hour同名的

Swift学习——A Swift Tour 对象和类

Objects and Classes  对象和类 使用关键字 class 定义一个类,在定义类的属性的时候与常量或者变量的定义相同(继承父类的属性定义不同),方法和函数的定义也相同 class Shape { var numberOfSides = 0 func simpleDescription() -> String { return "A shape with \(numberOfSides) sides." } } 使用 ()来声明类的实例,使用点 . 语法来获取类的属

C++ Primer 学习笔记_80_模板与泛型编程 --类模板成员

模板与泛型编程 --类模板成员 引言: 这一节我们介绍怎样实现前面提到的Queue模板类. 标准库将queue实现为其他容器之上的适配器.为了强调在使用低级数据结构中设计的编程要点,我们将Queue实现为链表.实际上,在我们的实现中使用标准库可能是个更好的决定!!-_-. 1.Queue的实现策略 如图所示,我们实现两个类: 1)QueueItem类表示Queue的链表中的节点,该类有两个数据成员item和next: a. item保存Queue中元素的值,它的类型随Queue的每个实例而变化:

JavaScript学习总结(十二)——JavaScript编写类

在工作中经常用到JavaScript,今天总结一下JavaScript编写类的几种写法以及这几种写法的优缺点,关于JavaScript编写类的方式,在网上看到很多,而且每个人的写法都不太一样,经常看到的就是以下几种方式. 1.构造函数方式 用构造函数模拟"类",在其内部用this关键字指代实例对象. 基本语法: function 类名(){     this.属性名;//公共属性     var 属性名;//私有属性    /*凡是定义类的公共属性和公共方法都要使用this*/   

转:学习笔记: Delphi之线程类TThread

学习笔记: Delphi之线程类TThread - 5207 - 博客园http://www.cnblogs.com/5207/p/4426074.html 新的公司接手的第一份工作就是一个多线程计算的小系统.也幸亏最近对线程有了一些学习,这次一接手就起到了作用.但是在实际的开发过程中还是发现了许多的问题,比如挂起与终止的概念都没有弄明白,导致浪费许多的时间. TThread-简单的开始 在Delphi的VCL中封装了一个TThread类用于多线程的开发,这样比较符合面向对象的思想,同时又可以提

自己手写的自动完成js类

在web开发中,为了提高用户体验,会经常用到输入框的自动完成功能,不仅帮助用户进行快速输入,最重要的是帮助那些“记不全要输入什么”的用户进行选择.这个功能有很多插件已经实现了,为了适应项目的特殊需求,决定自己编写一个具备通用性.扩展性和灵活性的自动完成类,就当是边写边学习了,一举两得.该功能是比较简单的,核心是数据获取方式和导航的实现,简单写了一个,经测试非常好用,还有很多地方需要修改和改进,例如:在原型中只暴露init方法即可,其他方法都需要放到私有空间内,不让用户访问到,这个以后再完善吧.啥

java 学习写架构必会几大技术点

java 学习写架构必会几大技术点 关于学习架构,必须会的几点技术 1. java反射技术 2. xml文件处理 3. properties属性文件处理 4. 线程安全机制 5. annocation注解 6. 设计模式 7. 代理机制(aop) 8. serlvet基础(过滤器等等)几样比较实用的技术: 1. 模板语言freemarker 2. ognl 3. gson json工具类    大家对于几大框架望而生畏,实际上只要明白他的原理,就会触类旁通,在这里我说说自己的几点拙见! MVC层

第二十五篇 jQuery 学习7 获取并设置 CSS 类

jQuery 学习7 获取并设置 CSS 类 jQuery动态控制页面,那么什么是动态呢?我们就说一下静态,静态几乎又纯html+css完成,就是刷新页面之后,不会再出现什么变动,一个实打实的静态页面.那么动态,我们基于静态的特征说,动态:刷新页面之后,还可以发生样式改变等,就为动态. 这节课我们学习的是jQuery控制css,那么css样式都被改变了,算动态么?当然算啦,刷新页面之后发生了改变,就已经不是静态了,只要是变动了,就算是啦. 我们这节课学习四个控制css的方法: addClass(