一、是什么?

SqlHelper是一个基于·NET Framework的数据库操作组件,组件中包括数据库操作方法。

二、为什么?

为什么要用SqlHelper类?

      1.SqlHelper用于简化反复的去写那些数据库连接(SqlConnection),SqlCommand,SqlDataReader等。

      2.qlHelper 封装过后一般是仅仅须要给方法传入一些參数如:数据库连接字符串。SQL參数等,就能够訪问数据库了。

      3.每种方法的重载都支持不同的方法參数。因此开发者能够确定传递连接、事务和參数信息的方式。

      4.为开发者选择訪问数据的方式提供了必要的灵活性。

三、怎么用?

在SqlHelper类中实现的方法包含:

      1.ExecuteNonQuery。

此方法用于运行不返回不论什么行或值的命令。这些命令通经常使用于运行数据库更新,但也可用于返回存储过程的输出參数。

      2.ExecuteReader。

此方法用于返回SqlDataReader对象。该对象包括由某一命令返回的结果集。

3.ExecuteDataset。此方法返回DataSet对象,该对象包括由某一命令返回的结果集。

      4.ExecuteScalar。此方法返回一个值。

该值始终是该命令返回的第一行的第一列。

5.ExecuteXmlReader。此方法返回 FOR XML 查询的 XML 片段。

VB.NET版实例(SqlHelper类):

Imports System.Data.SqlClient
Imports System.Reflection
Imports System.Data
Imports System.Configuration
Imports System.Collections.Generic Public Class SQLHelper
'定义一个数据库连接对象
Dim strCon As String = ConfigurationSettings.AppSettings("ConnString")
Dim conn As SqlConnection = New SqlConnection(strCon)
'定义一个命令对象
Dim cmd As New SqlCommand ''' <summary>
''' 关闭连接
''' </summary>
''' <param name="conn">须要关闭的连接</param>
''' <remarks></remarks>
Private Sub CloseConn(ByVal conn As SqlConnection)
'假设没有关闭。则关闭连接
If (conn.State <> ConnectionState.Closed) Then
conn.Close()
conn = Nothing
End If
End Sub ''' <summary>
''' 关闭命令
''' </summary>
''' <param name="cmd">须要关闭的命令</param>
''' <remarks></remarks>
Private Sub CloseCmd(ByVal cmd As SqlCommand)
'假设没有关闭命令,则关闭命令
If Not IsNothing(cmd) Then
cmd.Dispose() '处理
' cmd = Nothing
End If
End Sub ''' <summary>
''' 有參数的 增删改 操作
''' </summary>
''' <param name="cmdText">须要运行的命令</param>
''' <param name="cmdType">所运行命令的类型,通常是sql语句,也有可能是存储过程。或表</param>
''' <param name="sqlParams">參数数组</param>
''' <returns>返回运行 增删改 语句受影响的行数。为Integer类型</returns>
''' <remarks></remarks>
Public Function ExecuteNoQuery(ByVal cmdText As String, ByVal cmdType As CommandType, ByVal sqlParams As SqlParameter()) As Integer
'将传入的值,分别为cmd的属性赋值
cmd.Parameters.AddRange(sqlParams) '传入參数
cmd.CommandType = cmdType
cmd.Connection = conn '设置连接
cmd.CommandText = cmdText
'cmd = New SqlCommand(cmdText, conn)
Dim result As Integer
'运行操作
Try
conn.Open()
result = cmd.ExecuteNonQuery() '运行增删改操作并返回受影响的行数
cmd.Parameters.Clear() '清除參数
Catch ex As Exception
MsgBox(ex.Message, , "数据库操作")
Finally
Call CloseConn(conn) '关闭连接
Call CloseCmd(cmd) '关闭命令
End Try
Return result
End Function ''' <summary>
''' 无參数的 增删改 操作
''' </summary>
''' <param name="cmdText">须要运行的命令</param>
''' <param name="cmdType">所运行的命令的类型,通常是sql语句,也有可能是存储过程,或表</param>
''' <returns>返回运行 增删改 语句受影响的行数,为Integer类型</returns>
''' <remarks></remarks>
Public Function ExecuteNoQuery(ByVal cmdText As String, ByVal cmdType As CommandType) As Integer
'将传入的參数分别为cmd属性赋值
cmd.CommandType = cmdType
cmd.Connection = conn
cmd.CommandText = cmdText '设置查询单的语句
'cmd = New SqlCommand(cmdText, conn)
Dim res As Integer
'运行操作
Try
conn.Open()
res = cmd.ExecuteNonQuery() '运行 增删改操作并返回收到影响的行术
cmd.Parameters.Clear() '清楚參数
Catch ex As Exception
MsgBox(ex.Message, , "数据库操作")
Finally
Call CloseConn(conn)
Call CloseCmd(cmd)
End Try
Return res
End Function ''' <summary>
''' 有參数的查询操作
''' </summary>
''' <param name="cmdText">须要运行的命令</param>
''' <param name="cmdType">所运行命令的类型,通常是sql语句,也有可能是存储过程或者表</param>
''' <param name="sqlParams">參数数组</param>
''' <returns>返回运行 查询得到的结果,为DataTable类型</returns>
''' <remarks></remarks>
Public Function ExecSelect(ByVal cmdText As String, ByVal cmdType As CommandType, ByVal sqlParams As SqlParameter()) As DataTable Dim sqlAdapter As New SqlDataAdapter '声明适配器
Dim dt As New DataTable '声明数据表
Dim ds As New DataSet '声明数据缓存 cmd.CommandType = cmdType
cmd.Connection = conn
cmd.CommandText = cmdText '设置查询语句
'将传入的值分别付给cmd的属性
cmd.Parameters.AddRange(sqlParams) '将參数传入
'cmd = New SqlCommand(cmdText, conn)
sqlAdapter = New SqlDataAdapter(cmd) '实例化适配器
'运行操作
Try
sqlAdapter.Fill(ds) '用适配器对ds进行填充
dt = ds.Tables(0) '返回数据集的第一个表
cmd.Parameters.Clear() '清楚參数
Catch ex As Exception
MsgBox("查询失败", CType(vbOKOnly + MsgBoxStyle.Exclamation, MsgBoxStyle), "警告")
Finally
Call CloseConn(conn)
Call CloseCmd(cmd)
End Try
Return dt
End Function ''' <summary>
''' 无參数的查询操作
''' </summary>
''' <param name="cmdText">须要运行的命令</param>
''' <param name="cmdType">所运行命令的类型,通常是sql语句,也有可能是存储过程或者表</param>
''' <returns>返回运行 查询得到的结果。为DataTable类型</returns>
''' <remarks></remarks>
Public Function ExecSelect(ByVal cmdText As String, ByVal cmdType As CommandType) As DataTable
Dim sqlAdapter As SqlDataAdapter '声明适配器
Dim dt As New DataTable '声明数据表
Dim ds As New DataSet '声明数据缓存 '将传入的值分别给cmd属性赋值
cmd.CommandType = cmdType '设置一个值,届时cmdtext
cmd.Connection = conn
cmd.CommandText = cmdText
sqlAdapter = New SqlDataAdapter(cmd) '实例化适配器
'运行操作
Try
sqlAdapter.Fill(ds) '用适配器对ds进行填充
dt = ds.Tables(0) '返回数据集的第一个表
Catch ex As Exception
MsgBox("查询失败", CType(vbOKOnly + MsgBoxStyle.Exclamation, MsgBoxStyle), "警告")
Finally
Call CloseConn(conn)
Call CloseCmd(cmd)
End Try
Return dt
End Function
End Class

D层调用SqlHelper类中相应方法的实例:

<span style="font-family:KaiTi_GB2312;font-size:18px;">    '''调用有參数的增删改操作

    ''' <summary>
''' 向基本数据设定表中插入一行信息
''' </summary>
''' <param name="enBasicData">传入BasicData表中属性的值</param>
''' <returns>返回布尔值</returns>
''' <remarks></remarks>
Public Function InsertBasicData(enBasicData As BasicDataEntity) As Boolean Implements IDAL.IBasicData.InsertBasicData
'定义数据库连接字符串
Dim sql As String = "Insert into T_BasicData (Rate,TmpRate,UnitTime,LeastTime,PrepareTime,LimitCash,Date,Time,UserID) value(@rate,@tmprate,@unittime,@leasttime,@reparetime,@limitcash,@date,@time,@userid)"
'提出要插入的字符串。并赋值
Dim sqlparams As SqlParameter() = {New SqlParameter("@rate", enBasicData.Rate),
New SqlParameter("@tmprate", enBasicData.TmpRate),
New SqlParameter("@unittime", enBasicData.UnitTime),
New SqlParameter("@leasttime", enBasicData.LeastTime),
New SqlParameter("@preparetime", enBasicData.PrepareTime),
New SqlParameter("@limitcash", enBasicData.LimitCash),
New SqlParameter("@date", enBasicData.zDate),
New SqlParameter("@time", enBasicData.Time),
New SqlParameter("@userid", enBasicData.UserID)}
'实例化一个sqlhelper类的对象
Dim helper As New SQLHelper
'调用sqlhelper类的方法
Dim InsertOK = helper.ExecuteNoQuery(sql, CommandType.Text, sqlparams)
Return InsertOK
End Function '''无參数的增删改操作 ''' <summary>
''' 通过用户账号删除用户记录表中的全部信息
''' </summary>
''' <returns>返回布尔值</returns>
''' <remarks></remarks>
Public Function DeleteByUserID(enUser As UserEntity) As Boolean Implements IDAL.IUser.DeleteByUserID
'建立删除连接数据库语句
Dim sql As String = "delete from T_User"
'定义一个sqlHelper类的对象
Dim helper As New SQLHelper
'调用sqlHelper中的删除方法
Dim DeleteOK = helper.ExecuteNoQuery(sql, CommandType.Text)
Return DeleteOK
End Function '''调用有參数的查询操作 ''' <summary>
''' 通过卡号查询卡表中的信息
''' </summary>
''' <param name="enCard">传入CardID的值</param>
''' <returns>返回泛型集合</returns>
''' <remarks></remarks>
Public Function SelectByCardID(enCard As CardEntity) As List(Of CardEntity) Implements IDAL.ICard.SelectByCardID
'定义数据库连接字符串
Dim sql As String = "Select * from T_Card where CardID=@cardid"
'提出查询的字符串,并赋值
Dim sqlparams As SqlParameter() = {New SqlParameter("@cardid", enCard.CardID)}
'实例化一个暂时表
Dim table As New DataTable
'实例化一个sqlhelper类对象
Dim helper As New SQLHelper
'调用sqlhelper类的查询方法。并将查询到的信息放到暂时表中
table = helper.ExecSelect(sql, CommandType.Text, sqlparams)
'实例化一个泛型集合
Dim mylist As New List(Of CardEntity)
'将暂时表转化为泛型集合
mylist = DataTolist.converToList(Of CardEntity)(table)
Return mylist
End Function '''调用无參数的查询操作 ''' <summary>
''' 查询基本数据设定表中的最新信息
''' </summary>
''' <returns>返回泛型集合</returns>
''' <remarks></remarks>
Public Function SelectBasicData() As List(Of BasicDataEntity) Implements IDAL.IBasicData.SelectBasicData
'定义数据库连接字符串
Dim sql As String = "Select top 1 * from T_BasicData order by Date desc"
'实例化暂时表
Dim table As New DataTable
'实例化sqlhelper类对象
Dim helper As New SQLHelper
'调用sqlhelper类的查询方法,将查询到的信息放到暂时表中
table = helper.ExecSelect(sql, CommandType.Text)
'实例化一个泛型集合对象
Dim mylist As New List(Of BasicDataEntity)
'将暂时表转化为泛型集合
mylist = DataTolist.converToList(Of BasicDataEntity)(table)
Return mylist
End Function</span>

四、总结:

SqlHelper真的非常实用,期待与您下次更亲热的约会。

[机房合作]—SqlHelper我们又约了的更多相关文章

  1. 机房合作(三):We are Team,We are Family

    导读:拖拖拉拉,机房的合作也算是接近了尾声了.在这个过程中,真心是感谢我的两个组员.这个机房合作,看似简单,但我的组员给我的帮助和感动,都是不可忽略的.记得刚开始的时候,我就说过:不怕猪一样的组长,咱 ...

  2. 【机房收费系统C#版】——导出Excel

    前言 机房合作開始好长了一段时间.反重复复开了几次会,项目也是一拖再拖,作为组长.有80%的责任都在于我.为了不让这个项目陪着我过春节.要求自己一定要在这几天敲完. 还是一样的问题,用C#敲,从一開始 ...

  3. 机房重构——UML图最终版本

    刚开始画图时确实很纠结,那时候是在师父的逼迫下不得不画,不过这样也是有好处的,在师父的强烈要求下,我学会了如何使用EA,也对一个学习一个新的软件有了一个更好的方法,可以去找一些视频,或者文字资料来帮助 ...

  4. 未完成的IT路停在回车键---2014年末总结篇

    时间都去哪儿了?         一晃而过,越来越能体会到这个词的真实感.特别是过了二十岁,这种感觉越来越深刻,越来越强烈,犹如小编做公交车的时候一直向后排排倒的香樟树,还记得有首歌叫时间都哪儿了,而 ...

  5. B/S VS C/S

    从软件project的学习到如今的机房合作,我们一直在学习C/S,进入牛腩才正式进入了对B/S的了解,确切点牛腩则是对此的一个过渡,起到了承上启下的作用!看牛腩,事实上最大的感受就是他不止要设计到页面 ...

  6. 我的时间,GTD做主

    可能每一次总结的时候,我们都在努力的回顾,我这几天都干了什么,结果回顾半天得到的结果就是:我也不知道,仿佛什么都没有做似的.事实上不然,你已经做了好多事,但却始终有这样的感觉,有的时候都在自己发问:我 ...

  7. 用Lua定制Redis命令

    * { color: #3e3e3e } body { font-family: "Helvetica Neue", Helvetica, "Hiragino Sans ...

  8. 软考下午题详解---uml图

    在上篇博客中,小编主要简单的对软考下午题当中的数据流图设计进行了一系列总结,今天我们继续来看软考下午题当中大题部分,uml图的相关知识,在我们学习的过程中,我们也已经接触过,西安交大刘惠老师讲解过um ...

  9. Axure如何建立共享项目、如何编辑共享项目、如何获取共享项目

    如果小伙伴是一名编程工作者,我们不可以避免的会和Axure这块软件握手,但是但一个项目需要协同操作的时候,就需要用到项目共享的功能.类似我们的svn,想起机房合作的时候,每天早上来到427的我们,打开 ...

随机推荐

  1. 页面定制CSS代码

    博客皮肤:SimpleMemory .catListTitle { margin-top: 21px; margin-bottom: 10.5px; text-align: left; border- ...

  2. attr和prop的区别

    由于prop(property的缩写)和attr(attribute的缩写)翻译成汉语,均有“特性.属性”等意思的原因,导致大家容易混淆分不清. (1)在处理自定义时属性时,用attr(),若用pro ...

  3. PHP100视频教程-->视频下载

    链接:https://pan.baidu.com/s/14tbX1rz3hYSKY6k0T6WVzg提取码:kypy PHP是一种目前最流行的服务端Web程序开发语言之一.PHP主要的特点是语法简单易 ...

  4. upupoo(网页壁纸)自主修改一:农历

    最近在使用一款upupoo的壁纸软件,感觉还可以,主要是对其中html可设置为壁纸方面情有独钟 前几天在它的网页区发现了一个壁纸,感觉挺好: 感觉内容有点少,今天在工作空余时间就在其中加上了农历,同时 ...

  5. Spring框架针对dao层的jdbcTemplate操作之jdbc数据库连接原始操作方法 所需安装包下载

    crud指数据库或者持久层的基本操作,包括 增加(Create).读取查询(Retrieve 取回).更新(Update)和删除(Delete) Spring不仅对JDBC进行了封装,也对Hibern ...

  6. C指针类型转换问题

    先看下面的代码: #include<stdio.h> int main () { int a; char *x; x = (char *) &a; a = 512; x[0] = ...

  7. 使用Spring IoC进行Bean装配

    Spring概述 Spring的设计严格遵从的OCP(开闭原则),保证对修改的关闭,也就是外部无法改变spring内部的运行流程:提供灵活的扩展接口,也就是可以通过extends,implements ...

  8. [LUOGU] P2920 [USACO08NOV]时间管理Time Management

    见7.3测试 #include<iostream> #include<algorithm> #include<cstdio> using namespace std ...

  9. Github 多账号配置

    1. 不同账户,生成不同密钥ssh-keygen -t rsa -f github1 -C "xxx@163.com"ssh-keygen -t rsa -f github2 -C ...

  10. 详解Python装饰器由浅入深

    装饰器的功能在很多语言中都有,名字也不尽相同,其实它体现的是一种设计模式,强调的是开放封闭原则,更多的用于后期功能升级而不是编写新的代码.装饰器不光能装饰函数,也能装饰其他的对象,比如类,但通常,我们 ...