今天我书接上回,接着昨天的ado.net的数据库操作的相关知识来讲哈!

  从上篇文章给出的实例来看,你一定会发现,操作数据库其实还挺麻烦的,就连一个最简单的数据库操作语句都要包括 定义数据库连接字符串、创建数据库连接对象、打开数据库连接、定义sql语句、实例化操作数据库操作对象、操作数据库、关闭数据库等等步骤。但是,我们接触项目的时候会发现,数据库操作是项目中使用最频繁的功能了,那么有没有跟简单的方法去使用数据库的操作呢?有的,答案当然是,有的!怎么做?把数据库的操作封装成一个类呀,这就是我今天要记录的 封装SqlHelper类啦,哈哈!

  下面,我一步步来讲,如何封装吧,哈哈!

第一步:添加SqlHelper类

  首先,在项目里右击 ==》 添加 ==》新建项 ==》类 ==》 命名为 SqlHelper.cs ==》点击添加,如下图所示:

打开后我们就可以开始编写SqlHeiperl类了。

第二步:确定类中方法的参数

  我们在编写SqlHelper类时,肯定是希望把固定不变的东西写在类中,然后把那些变化的,需要我们手动输入的东西变成参数传递进来,那么哪些内容是需要我们通过参数传进来的呢?根据上一篇对数据库操作的基本讲解,我们知道,应该会有这样一些参数:

Sql语句:根据要操作的类型不同,sql语句肯定也会不同,insert\delete\update\select,这几个都不一样,所以这个sql语句肯定是作为一个参数传进来的;

Sql语句中的限定条件:执行sql语句时,我们大部分情况下会有某些限定条件吧,比如"删除id = xxx的那个行"、"查询某个名字是否存在" 之类的,那么这些限定条件肯定也是要传进来的。

  上面两个参数是肯定得有的,另外还有一个东西,它不是需要我们传进去的参数,而是一个需要我们进行配置的值,那就是数据库连接字符串conStr,在我的第一篇博客里也提到了这个东西的配置,这是方便我们更改连接的数据库而设定的一个参数。通常情况下,我们把" Data Source = .;Initial Catalog = 数据库名;Integrated Security = true" 这串配置信息放到一个叫 App.config的配置文件中,然后在SqlHelper中获取配置文件里的这个信息 ,然后执行连接数据库的操作就好了。这样做的好处是,我们不用在每个SqlHelper方法中定义conStr字符串,那么我们就可以把封装好的SqlHelper用在任意一个项目和连接任意数据库了。

以上是确定的几个参数。下面来具体封装一下SqlHelper:

第三步:封装SqlHelper

1.conStr配置

(1)首先,打开App.config文件,然后在下图所示位置加入如下代码:

代码:

 <connectionStrings>
<add name="mssqlserver" connectionString="Data Source = acer-pc; Initial Catalog = FirstDB ; Integrated Security = true"/>
</connectionStrings>
connectionString = 后面写你自己的数据库连接信息

(2)右击引用 ==》添加引用 ==》程序集 ==》勾选System.Configuration ==》确定:如下图所示

(3)在SqlHelper中定义连接字符串,代码如下:

 private static readonly string conStr = ConfigurationManager.ConnectionStrings["mssqlserver"].ConnectionString;

接下来可以开始编写数据库操作方法了,上一篇中讲了操作数据库的三种方法,分别是:ExcuteNonQuery\ExcuteScalar\ExcuteReader,那么我们在写SqlHelper的时候同样对应要有这三个方法,下面分别介绍三个方法的编写:

2.ExecuteNonQuery()方法

先给代码,再逐步解释哈:

   public static int ExecuteNonQurey(string sql,params SqlParameter[] pms)
{
using (SqlConnection con = new SqlConnection(conStr))
{
using (SqlCommand cmd = new SqlCommand(sql,con))
{
if (pms != null)
{
cmd.Parameters.AddRange(pms); //这个函数是用来添加参数值的,然后传递给存储过程,意思就是把需要的参数放到sql语句的指定位置
}
con.Open();
return cmd.ExecuteNonQuery();
}
}
}

首先说返回值,因为ExcuteNonQuery返回的是整形数据,所以返回值肯定是int类型的,然后说下参数呀,第一个是字符串类型(string)的sql语句,而第二个是参数类型(params)的数组,这个我来说一下,因为我学c语言的时候没见过这个类型,学php的时候也没见过这个类型,所以有点懵:

params是一个参数数组类型,什么意思呢,就是你可以把各种不同类型,不同数量的参数放到这个数组中进行传参,这个参数必须是一维数组,就这意思,想要了解更多关于params的同学可以戳这个链接:https://www.cnblogs.com/wangliu/p/3876672.html

这就是两个参数了。

然后接着下面就是按部就班的写代码往下走了,到第7行,我们要对参数数组进行校验,看其是否为空,如果为空,那就啥也不说直接执行就行了,如果不为空,那就得先做一件事,就是把需要的参数放到sql语句的指定位置,让它去执行就完了。关于Parameters.AddRange()方法的讲解可以看这篇博客:https://blog.csdn.net/wang13667539325/article/details/9672829.

3.ExcuteScalar()方法:

同样还是先上代码,再逐步解释啊:

  public static object ExecuteScalar(string sql,params SqlParameter[] pms)
{
using (SqlConnection con = new SqlConnection(conStr))
{
using (SqlCommand cmd = new SqlCommand(sql,con))
{
if (pms != null)
{
cmd.Parameters.AddRange(pms);
}
con.Open();
return cmd.ExecuteScalar();
} } }

说是逐步解释,其实也没啥好解释的吧,这个跟上面那个几乎一样,哈哈!

4.Execute.Reader():

第三个略有不同,先看代码

  public static SqlDataReader ExecuteReader(string sql,params SqlParameter[] pms)
{
SqlConnection con = new SqlConnection(conStr);
using (SqlCommand cmd = new SqlCommand(sql,con))
{
if ( pms != null)
{
cmd.Parameters.AddRange(pms);
}
try
{
con.Open();
return cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
            //System.Data.CommandBehavior.CloseConnection这个枚举参数,表示将来使用完毕SqlDataReader后,在关闭reader的同时,在SqlDataReader内部会将关联的Connection对象也关闭掉 }
catch {
con.Close();
con.Dispose();
throw;
}
}
}

这个里面的写法不太一样,这里的创建连接数据库对象时没有用using,这是为啥呢?

记得我们前面说过,这个方法返回的对象 reader它不是一个装东西的仓库,它只是一个纽带,那么我们返回这个东西后,我们还要用这个东西来从数据库取值,但是如果用using的话,那默认就是using结束后就把数据库关掉了,这个时候,数据库已经关掉了,我们即使得到了返回的这个reader,也没法用它来取值了,就相当于返回的reader对我们并无卵用了。所以啊,这里连接数据库的时候,我们就不用using啦。

  那你又要问了,那数据库用完了难道就不管吗?当然不是,继续看后面的代码,后面有个 try....catch...,try里面有段注释说明,看到了吧!什么?太小了,看不到,我气得喷了一口老血,好吧,那我把这句话copy到下面:

  System.Data.CommandBehavior.CloseConnection这个枚举参数,表示将来使用完毕SqlDataReader后,在关闭reader的同时,在SqlDataReader内部会将关联的Connection对象也关闭掉,也关闭掉,也关闭掉!

关于SqlHelper的封装,我就说到这里啦,文中有些地方我写的时候也不是很懂,但是写完了就懂了。这里参考了一篇csdn的博客,也是写封装SqlHelper,没我啰嗦,但写的更全面,附上链接:https://blog.csdn.net/langji1234/article/details/44724779 ,有需要的可以戳进去看看哦。

今天就写到这里啦,哈哈,菜鸡下午要去学点新东西哈哈!

我的QQ:3074596466

ado.net的简单数据库操作(二)之封装SqlHelperl类的更多相关文章

  1. ado.net的简单数据库操作(一)

    摘要:接下来的几篇博客将要讲到如何使用ado.net实现简单的数据库操作,包括增删改等内容.首先会介绍基础的数据库操作,然后以一个实例来进行讲解,这个实例会把一个数据表读取到winform上,然后在w ...

  2. ado.net的简单数据库操作(三)——简单增删改查的实际应用

    果然,在犯困的时候就该写写博客,写博客就不困了,哈哈! 上篇我记录了自己的SqlHelper的开发过程,今天记录一下如何使用这个sqlhelper书写一个具有简单增删改查的小实例啦. 实例描述:在数据 ...

  3. DRF框架(五)——context传参,二次封装Response类,两个视图基类(APIView/GenericAPIView),视图扩展类(mixins),子类视图(工具视图),视图集(viewsets),工具视图集

    复习 1.整体修改与局部修改 # 序列化get (给前端传递参数) #查询 ser_obj = ModelSerializer(model_obj) #只传递一个参数,默认是instance的参数,查 ...

  4. 二次封装Response类 | 视图类传递参数给序列化类context

    二次封装Response类 源码: class Response(SimpleTemplateResponse): """ An HttpResponse that al ...

  5. Java Web----Java Web的数据库操作(二)

    Java Web的数据库操作 三.JDBC操作数据库 上一篇介绍了JDBC API,之后就可以通过API来操作数据库,实现对数据库的CRUD操作了. http://blog.csdn.net/zhai ...

  6. FMDB 二次封装工具类,让你快速学会封装,集成数据库

    来源:StrivEver 链接:http://www.jianshu.com/p/4c77aee0b41c 上个版本为了增加用户体验,部分页面集成了离线缓存数据功能,于是就在项目里使用了数据库管理离线 ...

  7. Android中SQLite数据库操作(2)——SQLiteOpenHelper类

    如果开发者对SQL语法不熟悉,我要告诉你一个好消息,Android提供了一个SQLiteOpenHelper类. 在实际项目中很少使用SQLiteDatabase的方法(请看:http://blog. ...

  8. 谈谈Delphi中的类和对象4---类是一种对数据和操作高度的封装机制 && 类是一种代码重用机制

    五.类是一种对数据和操作高度的封装机制 1)数据封装 unit Unit2; interface type TEmployee = class; private FName: String; publ ...

  9. ADO.NET 使用通用数据库操作类Database (SQL Server)

    一.Web.config配置 <connectionStrings> <add name="constr_name" connectionString=" ...

随机推荐

  1. zookeeper(zkCli)命令概览

    连接: ./zkCli.sh -timeout 0 -r -server ip:port -timeout:当前会话的超时时间,zookeper依靠与客户端的心跳来判断会话是否有效,单位是毫秒-r: ...

  2. 解决jenkins slave 中文乱码 encoding=ANSI_X3.4-1968

    jenkins配置slave进行构建时,发现slave构建的控制台输入中文乱码,查看master,slave的jenkins系统信息 file.encoding和sun.jnu.encoding都没有 ...

  3. Shell 脚本中调用另一个 Shell 脚本的三种方式

    主要以下有几种方式: Command Explanation fork 新开一个子 Shell 执行,子 Shell 可以从父 Shell 继承环境变量,但是子 Shell 中的环境变量不会带回给父 ...

  4. ASP.NET Core在Azure Kubernetes Service中的部署和管理

    目录 ASP.NET Core在Azure Kubernetes Service中的部署和管理 目标 准备工作 注册 Azure 账户 AKS文档 进入Azure门户(控制台) 安装 Azure Cl ...

  5. python接口自动化(十五)--参数关联接口(详解)

    简介 我们用自动化新建任务之后,要想接着对这个新建任务操作,那就需要用参数关联了,新建任务之后会有一个任务的Jenkins-Crumb,获取到这个Jenkins-Crumb,就可以通过传这个任务Jen ...

  6. Java核心技术梳理-集合

    一.前言 在日常开发中,我们经常会碰到需要在运行时才知道对象个数的情况,这种情况不能使用数组,因为数组是固定数量的,这个时候我们就会使用集合,因为集合可以存储数量不确定的对象. 集合类是特别有用的工具 ...

  7. C#串口通讯概念以及简单实现

    最近在研究串口通讯,其中有几个比较重要的概念,RS-232这种适配于上位机和PC端进行连接,RS-232只限于PC串口和设备间点对点的通信.它很简单的就可以进行连接,由于串口通讯是异步的,也就是说你可 ...

  8. Netty源码—六、tiny、small内存分配

    tiny内存分配 tiny内存分配流程: 如果申请的是tiny类型,会先从tiny缓存中尝试分配,如果缓存分配成功则返回 否则从tinySubpagePools中尝试分配 如果上面没有分配成功则使用a ...

  9. 折腾Java设计模式之解释器模式

    解释器模式 解释器模式是类的行为模式.给定一个语言之后,解释器模式可以定义出其文法的一种表示,并同时提供一个解释器.客户端可以使用这个解释器来解释这个语言中的句子. 意图 给定一个语言,定义它的文法表 ...

  10. GIS之家小专栏

    专栏简介:WebGIS开发者@GIS之家,一直混迹GIS行业,关注WebGIS开发方向,在本专栏中,分享WebGIS入门开发系列技术文章 核心内容: arcgis api 3.x for js开发系列 ...