.net 在数据访问层中写一个DBhelper优化类
复习了在学校的时候做的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优化类的更多相关文章
- ClownFish:比手写代码还快的通用数据访问层
http://www.cnblogs.com/fish-li/archive/2012/07/17/ClownFish.html 阅读目录 开始 ClownFish是什么? 比手写代码还快的执行速度 ...
- 【2017-04-20】Ado.Net与面向对象结合架构中的数据访问层(实体类,数据访问类)
开发项目三层架构:界面层.业务逻辑层.数据访问层 今天学习一下数据访问层,分为实体类和数据访问类 所有的类放在App_Code这个文件夹下边.养成一个好的习惯. 一.实体类 数据库中的表映射为一个类, ...
- servlet层调用biz业务层出现浏览器 500错误,解决方法 dao数据访问层 数据库Util工具类都可能出错 通过新建一个测试类复制代码逐步测试查找出最终出错原因
package com.swift.jztk.servlet; import java.io.IOException; import javax.servlet.ServletException; i ...
- 随机获得MySQL数据库中100条数据方法 驾照题库项目 MVC架构 biz业务层的实现类 根据考试类型rand或order通过dao数据访问层接口得到数据库中100或全部数据
package com.swift.jztk.biz; import java.util.Collections; import java.util.Comparator; import java.u ...
- 【Filter 不登陆无法访问】web项目中写一个过滤器实现用户不登陆,直接给链接,无法进入页面的功能
在web项目中写一个过滤器实现用户不登陆,直接给链接,无法进入页面,而重定向到登陆界面的功能. 项目是用springMVC+spring+hibernate实现 (和这个没有多大关系) 第一步: 首先 ...
- 使用Ninject+Moq在单元测试中抽象数据访问层
一.测试方法的业务逻辑时,通常都需要从数据库读取测试数据,但是每次初始化数据库数据都很麻烦,也会影响到其它业务对数据的访问,怎样抽象数据访问层呢?就是用Moq去模拟数据访问的逻辑 二.步骤如下 ...
- 【Hades】ades是一个开源库,基于JPA和Spring构建,通过减少开发工作量显著的改进了数据访问层的实现
几乎每个应用系统都需要通过访问数据来完成工作.要想使用领域设计方法,你就需要为实体类定义和构建资源库来实现领域对象的持久化.目前开发人员经常使用JPA来实现持久化库.JPA让持久化变得非常容易,但是仍 ...
- 企业级应用架构(三)三层架构之数据访问层的改进以及测试DOM的发布
在上一篇我们在宏观概要上对DAL层进行了封装与抽象.我们的目的主要有两个:第一,解除BLL层对DAL层的依赖,这一点我们通过定义接口做到了:第二,使我们的DAL层能够支持一切数据访问技术,如Ado.n ...
- 数据访问层的改进以及测试DOM的发布
数据访问层的改进以及测试DOM的发布 在上一篇我们在宏观概要上对DAL层进行了封装与抽象.我们的目的主要有两个:第一,解除BLL层对DAL层的依赖,这一点我们通过定义接口做到了:第二,使我们的DAL层 ...
随机推荐
- python中staticmethod classmethod及普通函数的区别
staticmethod 基本上和一个全局函数差不多,只不过可以通过类或类的实例对象 (python里光说对象总是容易产生混淆, 因为什么都是对象,包括类,而实际上 类实例对象才是对应静态语言中所谓对 ...
- memcached内存分配及回收初探
对memcached(后面简称mc) 的内存分配及回收机制进行了深度分析和测试,以下是一些学习的心得,和大家共同探讨一下,期望能抛砖引玉 mc简介: mc是由LiveJournal技术团队开发的一套分 ...
- defer 与 async
defer HTML4.01定义的 只适用于外部脚本(IE4~7会支持内嵌脚本的defer属性) 告诉浏览器立即下载,延迟执行,脚本会延迟到整个页面全部解析完毕之后才运行 HTML5规范要求脚本按照他 ...
- Tomcat中Context的配置
Tomcat直接ip地址访问不用加端口和项目名 当我们开发完一个WEB项目 然后部署到tomcat下,正常情况下应该是这样访问:http://localhost:端口号/项目名 如果我们想让用户仅仅输 ...
- enode框架step by step之框架的物理部署思路
enode框架step by step之框架的物理部署思路 enode框架系列step by step文章系列索引: enode框架step by step之开篇 enode框架step by s ...
- continue与break
1.continue语句,1至20内奇数累加和 #include<iostream> using namespace std; void main(){ int i=0; int sum= ...
- 【详细贴】Ubuntu Linode搭建海外策略路由VPN IPSec+L2TP(一)
对于码农来说,Google上搜索,stackoverflow上提问,twitter上交流,这样的国际化开放平台才是码农成长的空间.但是,目前遇到的一些现实的困难,无可避免的带来一些麻烦,不过这难不倒我 ...
- 从零开始学C++之对象的使用(二):四种对象生存期和作用域、static 用法总结
一.四种对象生存期和作用域 栈对象 隐含调用构造函数(程序中没有显式调用) 堆对象 隐含调用构造函数(程序中没有显式调用),要显式释放 全局对象.静态全局对象 全局对象的构造先于main函数 已初始化 ...
- 由自动装箱和拆箱引发我看Integer源码
背景和问题 在看别人整理的资料时,看到如下一段代码: package com.sitech.test; /** * 自动装箱和拆箱 jdk1.6 * @author liaowp * */ publi ...
- HTTP协议系列(2)--顺带离职的一些想法
一.聊聊离职感悟 来杭州也是将近3个月了,也迎来我的第一次辞职,有可能你会说我傻怎么不拿年终奖,也有可能你会不理解为什么3个月就要辞职:我只能说我是怀揣的梦想来的,我想着进一步的提升,想着成 ...