C#封装CRUD到SqlHelper类解读
1、简单说明一下,一般情况下,数据库连接字符串是在App.config文件中进行配置,然后再在代码中进行引用。因此,我们在这里先看一下App.config文件。
首先看需要添加的内容:
参数说明:
name:表示键值,在代码中需要通过这键值来找到对应的连接字符串信息。
connectionString:链接数据库的字符串信息。Server:数据库服务器,Database:数据库,uid:数据库账户名,pwd:数据库密码
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<!--这个写数据库链接配置信息,自己手动添加,严格区分大小写-->
<connectionStrings>
<add name="mssql" connectionString="Server=.;Database=db_test;uid=sa;pwd=123456"/>
</connectionStrings>
<!--这个写数据库链接配置信息,自己手动添加,严格区分大小写-->
</configuration>
2、接下就是代码了,介绍都在注释里,直接看代码吧。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Configuration;
using System.Data.SqlClient; namespace SQLHelper
{
/// <summary>
/// 为了方便调用,一般将SqlHelper类写为静态类
/// </summary>
public static class SqlHelper
{
//需要添加引用--框架,System.Configuration,添加再using
private static readonly string conStr = ConfigurationManager.ConnectionStrings["mssql"].ConnectionString;
/// <summary>
/// 封装增加、删、改方法,方法名可以随便写,但是为了方便查看,用了和SqlCommand类一一样的方法名
/// </summary>
/// <param name="sql">SQL语句</param>
/// <param name="pms">SQL参数,因为不知道会有多少个参数,所以用可变参数params</param>
/// <returns>受影响的行数</returns>
public static int ExecuteNonQuery(string sql, params SqlParameter[] pms)
{ using (SqlConnection conn = new SqlConnection(conStr))
{
using (SqlCommand cmd = new SqlCommand(sql, conn))
{
if (pms != null)
{
cmd.Parameters.AddRange(pms);
}
conn.Open(); return cmd.ExecuteNonQuery();
}
} } /// <summary>
/// 查询单个结果,一般和聚合函数 一起使用
/// </summary>
/// <param name="sql">查询的SQL语句</param>
/// <param name="pms">SQL参数</param>
/// <returns>返回查询对象,查询结果第一行第一列</returns>
public static object ExecuteScalar(string sql, params SqlParameter[] pms)
{ using (SqlConnection conn = new SqlConnection(conStr))
{
using (SqlCommand cmd = new SqlCommand(sql, conn))
{
if (pms != null)
{
cmd.Parameters.AddRange(pms);
}
conn.Open(); return cmd.ExecuteScalar();
}
} } /// <summary>
/// 查询多行
/// </summary>
/// <param name="sql">SQL语句</param>
/// <param name="pms">SQL参数</param>
/// <returns>返回SqlDataReader对象</returns>
public static SqlDataReader ExcuteReader(string sql, params SqlParameter[] pms)
{ //这里不能用using,不然在返回SqlDataReader时候会报错,因为返回时候已经在using中关闭了。
//事实上,在使用数据库相关类中,SqlConnection是必须关闭的,但是其他可以选择关闭,因为CG回自动回收
SqlConnection conn = new SqlConnection(conStr);
using (SqlCommand cmd = new SqlCommand(sql, conn))
{
if (pms != null)
{
cmd.Parameters.AddRange(pms);
}
try
{
conn.Open();
//传入System.Data.CommandBehavior.CloseConnection枚举是为了让在外面使用完毕SqlDataReader后,只要关闭了SqlDataReader就会关闭对应的SqlConnection
return cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
}
catch
{
conn.Close();
conn.Dispose();
throw;
}
}
}
}
}
C#封装CRUD到SqlHelper类解读的更多相关文章
- JAVA WEB SQLHelper类的封装
在这次做项目中,我对自己最满意的就是封装了一下SQLHelper类,我对自己感到骄傲主要是 我是初学者,我刚开始不知道可以这样做,我只是想着试着去这样做了,结果真的可以,所以我 在我的模块就自己封装了 ...
- 【转载】微软官方提供的Sqlserver数据库操作帮助类SQLHelper类
在.NET平台中,C#语言一般使用ADO.NET组件来操作Sqlserver数据库,通过ADO.NET组件可以实现连接数据库.查询数据集.执行SQL语句以及关闭数据库连接等操作,为此网上有很多开发者自 ...
- 为什么要用Hibernate框架? 把SessionFactory,Session,Transcational封装成包含crud的工具类并且处理了事务,那不是用不着spring了?
既然用Hibernate框架访问管理持久层,那为何又提到用Spring来管理以及整合Hibernate呢?把SessionFactory,Session,Transcational封装成包含crud的 ...
- ADO.NET复习——自己编写SqlHelper类
今天复习了一次ADO.NET基础,整理一下自己的认为的重点: 编写SqlHelper类,方便我们执行数据库语句,这时可以直接调用封装在SqlHelper类的方法.现在大多数公司面试的时候,给你的面试题 ...
- 【Android】19.3 ContentProvider及安卓进一步封装后的相关类
分类:C#.Android.VS2015: 创建日期:2016-03-08 一.简介 ContentProvider:内容提供程序. Android的ContentProvider与.NET框架的EF ...
- 微软官方SqlHelper类 数据库辅助操作类
数据库操作类真的没有必要自己去写,因为成熟的类库真的非常完善了,拿来直接用就好,省时省力. 本文就为大家介绍微软官方的程序PetShop4.0中的SqlHelper类,先来做一下简单的介绍,PetSh ...
- Mybatis学习之自定义持久层框架(五) 自定义持久层框架:封装CRUD操作
前言 上一篇文章我们完成了生产sqlSession的工作,与数据库的连接和创建会话的工作都已完成,今天我们可以来决定会话的内容了. 封装CRUD操作 首先我们需要创建一个SqlSession接口类,在 ...
- Android RecyclerView单击、长按事件:基于OnItemTouchListener +GestureDetector标准实现(二),封装抽取成通用工具类
Android RecyclerView单击.长按事件:基于OnItemTouchListener +GestureDetector标准实现(二),封装抽取成通用工具类 我写的附录文章2,介绍了 ...
- 最新的SqlHelper 类
最新的SqlHelper 类 摘自:http://www.cnblogs.com/sufei/archive/2010/01/14/1648026.html using System; using S ...
随机推荐
- MATLAB选出一个数组里n个元素的所有组合
用nchoosek(A,n) 如: nchoosek([1,5,3,2,4,0],3) nchoosek([1,5,3,2],2)ans = 1 5 1 3 1 ...
- nova shelve
当一个虚机不需要使用的时候,可以将其 shelve 起来.该操作会创建该虚机的一个快照并传到 Glance 中,然后在 Hypervisor 上将该虚机删除,从而释放其资源. 其主要过程为: dest ...
- eclipse导入redis的源码
import--c/c++ Executable 选择编译后的so文件.这样就导入工程了. 可以在eclipse直接修改c代码,重新编译后就能看到效果了. 重新编译: 1:make clean 2: ...
- SQL必知必会 记录
登录数据库mysql -u root -p查看所有数据库 show databases:选择数据库 use 数据库名:查看所有表 show tables查看表结构 descri ...
- 无法锁定管理目录(/var/lib/dpkg/),是否有其他进程正占用它
dpkg应用程序被占用 错误提示: E: 无法获得锁 /var/lib/dpkg/lock – open (11: 资源暂时不可用) E: 无法锁定管理目录(/var/lib/dpkg/),是否有其他 ...
- spring boot 基础篇 -- 阿里多数据源
这块是比较基础的配置,阿里数据库配置还是比较好用的,并且可以用来监控数据源的情况.废话不多说,下面看代码. 基于maven项目,在pom.xml中添加引用: <dependency> &l ...
- Amazon EMR(Elastic MapReduce):亚马逊Hadoop托管服务运行架构&Hadoop云服务之战:微软vs.亚马逊
http://s3tools.org/s3cmd Amazon Elastic MapReduce (Amazon EMR)简介 Amazon Elastic MapReduce (Amazon EM ...
- 12-THREE.JS 自然光
<!DOCTYPE html> <html> <head> <title></title> <script src="htt ...
- Redis集群部署3.0
我用的Mac的终端 ------------------------- 1.Redis简介 centos(5.4) Redis是一个key-value存储系统.和Memcached类似,但是解决了断 ...
- 《Effective C++》——条款20:宁以pass-by-reference-to-const替换pass-by-value
切割(slicing)问题 请看下面代码: class Window { public: ... std::string name()const; //返回窗口名称 virtual void disp ...