复习了在学校的时候做的WinForm端的一个学生信息管理系统,用的三层架构,看了一下里面的数据优化类

这个类是用来把对数据库的操作封装成静态方法,增删改查的时候直接调用这个类,减少项目里代码的冗余和方便以后修改。

Dbhelper类代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.SqlClient;
using System.Data;
using Model;
namespace DAL
{
    class DBHelper
    {

        #region 获得连接对象 Connsql
        public static SqlConnection Connsql()
        {
            string sql = "server=.;database=vs;integrated security=sspi";
            SqlConnection conn = new SqlConnection(sql);
            return conn;
        }
        //执行 增加,删除,修改的sql语句
        #endregion

        #region 增加删除修改的sql语句执行方法  ExecuteNonQuery
        public static int ExecuteNonQuery(string sql,CommandType type,params SqlParameter[] sp)
        {
            SqlConnection conn = DBHelper.Connsql();
            conn.Open();

            SqlCommand sc = new SqlCommand(sql, conn);
            sc.CommandType = type;

            if(sp!=null)
            {
                foreach (SqlParameter p in sp)
                {
                    sc.Parameters.Add(p);
                }
            }
            int i = sc.ExecuteNonQuery();
            conn.Close();
            return i;
        }
        #endregion

        #region 数据库返回一个值时的sql语句执行方法
        public static Object ExecuteScalar(string sql,CommandType type, params SqlParameter[] paras)
        {
            SqlConnection conn = DBHelper.Connsql();
            conn.Open();
            SqlCommand  sc = new SqlCommand(sql,conn);
            sc.CommandType=type;

            if(paras!=null)
            {
            foreach(SqlParameter s in paras )
            {
            sc.Parameters.Add(s);
            }
            }
            object result = sc.ExecuteScalar();
            conn.Close();
            return result;
        }
        #endregion

        #region 数据库返回多行记录的执行方法
        public static SqlDataReader ExecuteDataReader(string sql,CommandType type,params SqlParameter[] paras)
        {
            SqlConnection conn = DBHelper.Connsql();
            conn.Open();
            SqlCommand sc = new SqlCommand(sql,conn);
            sc.CommandType = type;

            if (paras != null)
            {
                foreach (SqlParameter s in paras)
                {
                    sc.Parameters.Add(s);
                }
            }
            SqlDataReader dr = sc.ExecuteReader(CommandBehavior.CloseConnection);
            return dr;
        }
        #endregion

        #region 返回一个数据集时执行方法
        public static DataSet ExecuteDataSet(string sql,CommandType type,params SqlParameter [] paras)
        {
            SqlConnection conn = DBHelper.Connsql();
            conn.Open();
            SqlCommand sc = new SqlCommand(sql,conn);
            sc.CommandType = type;

            if (paras != null)
            {
                foreach(SqlParameter s in paras)
                {
                    sc.Parameters.Add(s);
                }
            }
            SqlDataAdapter sda = new SqlDataAdapter(sc);
            DataSet ds = new DataSet();
            sda.Fill(ds);
            return ds;
        }
        #endregion

    }
}

调用DbHelper类:

1.返回一个值:

 int result =(int)this.ExecuteScalar("select count(*) from UserAccount", CommandType.Text);

2.返回一个数据集(存放到Dataset):

   DataSet ds = ExecuteDataSet("select * from UserAccount", CommandType.Text);
   ];

3.返回一个数据集(存放到List),性能上比DataSet要好

  #region 将数据填充到List集合中
       public List<tbSpecialty> GettbSpecialty()
       {
           List<tbSpecialty> sp = new List<tbSpecialty>();
           SqlDataReader dr = DBHelper.ExecuteDataReader("select * from tbSpecialtyInfo", CommandType.Text);
               while(dr.Read())
               {
                   tbSpecialty tsp = new tbSpecialty();
                   tsp.SpecialtyName = dr["SpecialtyName"].ToString();
                   sp.Add(tsp);
               }
               dr.Close();
               return sp;
       }
       #endregion

4.增删改:

#region
       public int AddtbSpecialty(tbSpecialty sp)
       {
           string sql = "insert into tbSpecialtyInfo values(@name,@remark)";
           SqlParameter p1 = new SqlParameter("@name", sp.SpecialtyName);
           SqlParameter p2 = new SqlParameter("@remark",sp.Remark);
           int result = DBHelper.ExecuteNonQuery(sql, CommandType.Text, p1, p2);
           return result;
       }
       #endregion

.net 在数据访问层中写一个DBhelper优化类的更多相关文章

  1. ClownFish:比手写代码还快的通用数据访问层

    http://www.cnblogs.com/fish-li/archive/2012/07/17/ClownFish.html 阅读目录 开始 ClownFish是什么? 比手写代码还快的执行速度 ...

  2. 【2017-04-20】Ado.Net与面向对象结合架构中的数据访问层(实体类,数据访问类)

    开发项目三层架构:界面层.业务逻辑层.数据访问层 今天学习一下数据访问层,分为实体类和数据访问类 所有的类放在App_Code这个文件夹下边.养成一个好的习惯. 一.实体类 数据库中的表映射为一个类, ...

  3. servlet层调用biz业务层出现浏览器 500错误,解决方法 dao数据访问层 数据库Util工具类都可能出错 通过新建一个测试类复制代码逐步测试查找出最终出错原因

    package com.swift.jztk.servlet; import java.io.IOException; import javax.servlet.ServletException; i ...

  4. 随机获得MySQL数据库中100条数据方法 驾照题库项目 MVC架构 biz业务层的实现类 根据考试类型rand或order通过dao数据访问层接口得到数据库中100或全部数据

    package com.swift.jztk.biz; import java.util.Collections; import java.util.Comparator; import java.u ...

  5. 【Filter 不登陆无法访问】web项目中写一个过滤器实现用户不登陆,直接给链接,无法进入页面的功能

    在web项目中写一个过滤器实现用户不登陆,直接给链接,无法进入页面,而重定向到登陆界面的功能. 项目是用springMVC+spring+hibernate实现 (和这个没有多大关系) 第一步: 首先 ...

  6. 使用Ninject+Moq在单元测试中抽象数据访问层

    一.测试方法的业务逻辑时,通常都需要从数据库读取测试数据,但是每次初始化数据库数据都很麻烦,也会影响到其它业务对数据的访问,怎样抽象数据访问层呢?就是用Moq去模拟数据访问的逻辑     二.步骤如下 ...

  7. 【Hades】ades是一个开源库,基于JPA和Spring构建,通过减少开发工作量显著的改进了数据访问层的实现

    几乎每个应用系统都需要通过访问数据来完成工作.要想使用领域设计方法,你就需要为实体类定义和构建资源库来实现领域对象的持久化.目前开发人员经常使用JPA来实现持久化库.JPA让持久化变得非常容易,但是仍 ...

  8. 企业级应用架构(三)三层架构之数据访问层的改进以及测试DOM的发布

    在上一篇我们在宏观概要上对DAL层进行了封装与抽象.我们的目的主要有两个:第一,解除BLL层对DAL层的依赖,这一点我们通过定义接口做到了:第二,使我们的DAL层能够支持一切数据访问技术,如Ado.n ...

  9. 数据访问层的改进以及测试DOM的发布

    数据访问层的改进以及测试DOM的发布 在上一篇我们在宏观概要上对DAL层进行了封装与抽象.我们的目的主要有两个:第一,解除BLL层对DAL层的依赖,这一点我们通过定义接口做到了:第二,使我们的DAL层 ...

随机推荐

  1. JavaScript事件的几个细节

    JavaScript事件的几个细节 一.是捕获还是冒泡 昨天被问到一个问题:事件流有几个阶段?在这几个阶段中,事件一共发生几次? 问题很简单,但对于事件一共发生几次有点乱.总觉得捕获也能触发事件.冒泡 ...

  2. xcode5向APP store上传应用的时候注意点

    最近我在向appstore 上传应用的时候遇到了各种问题,由于网上的一些教程都是很久以前写的了,现在发布网站有些改动,所以自己走了很多弯路,不多说了,自己记录下犯下的错误吧.我是按照这片博客操作的:点 ...

  3. IOS学习之路二十二(UIAlertView获得文本框内容及添加北京图片)

    今天写项目要用到警告框带输入框的,于是就自己做了个小demo. 效果图大体如下: 下面简单介绍一下UIAlertView alertViewStyle属性有以下三种选项:  UIAlertViewSt ...

  4. 项目Splash页面的开发与设计

    项目Splash页面的开发与设计 首先建立一个安卓的项目,然后修改manifest.xml文件,修改应用程序的logo和显示名称,效果图如下: 对应的代码如下: 1 <?xml version= ...

  5. 项目结构的设计(iOS篇)

    项目结构的设计(iOS篇) 本文附带源码:YoungHeart-Chapter-02.zip 在设计任何一个框架之前,都应规划好项目结构. 假定Git作为我们的项目管理工具.我们要建立两个仓库,一个用 ...

  6. C# ToString格式控制符

    C 货币 2.5.ToString("C") ¥2.50 D 十进制数 25.ToString("D5") 00025 E 科学型 25000.ToString ...

  7. TOGAF架构开发方法(ADM)之架构变更管理阶段

    TOGAF架构开发方法(ADM)之架构变更管理阶段 1.10 架构变更管理(Architecture Change Management) 企业架构开发方法各阶段——架构变更管理 1.10.1 目标 ...

  8. wget ( download the whole page from the website )

    ---恢复内容开始--- wget -m -e robots=off -U "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.1 ...

  9. 学习Machine Leaning In Action(四):逻辑回归

    第一眼看到逻辑回归(Logistic Regression)这个词时,脑海中没有任何概念,读了几页后,发现这非常类似于神经网络中单个神经元的分类方法. 书中逻辑回归的思想是用一个超平面将数据集分为两部 ...

  10. [设计模式-创建型]工厂方法(Factory Method)

    概括 名称 Factory Method 结构 动机 定义一个用于创建对象的接口,让子类决定实例化哪一个类.Factory Method 使一个类的实例化延迟到其子类. 适用性 当一个类不知道它所必 ...