SqlHelper其实就是一个类。

早就听说过“SqlHelper”这个名词,也查过相关的资料,但还是一头雾水。当真的去实践去用它时,就会发现其实它没那么神秘。

当敲第一个窗体的时候,功能实现了,我们就会觉得很高兴,大功告成了。可是当敲完第二个窗体、第三个窗体的时候,慢慢的就开始觉得代码重复的太多了,越敲就越觉得心虚。虽然设计模式学的不怎么样,但是最起码让我有了这个意识去想怎么让代码更少一些,让彼此之间的耦合度尽量减少。在三层中,要数D层的代码相似度最高了,总结来说,也就是连接数据库,增删改查的功能。那么,我们完全可以把这部分共同的东西拿出来放在一起,这样既能减少了代码量,也很好的做到了封装。

SqlHelper这个类里,有几个方法

在sqlhelper中,最重要的无非是那几个增删改查的方法了。查了很多博客,类中的方法也有很多种,包括ExecuteNonQuery、ExecuteReader、ExecuteDataSet、ExecuteScalar、ExecuteXmlReader等,但我们并不会都用到,有的方法了解一下就好了。方法可以划分的细,但如果分的太细,就会弄的太复杂了。我习惯把方法分的少一些。

Public Class sqlHelper
''' <summary>
''' 有参数的增、删、改操作
''' </summary>
''' <param name="cmdText"></param>
''' <param name="cmdType"></param>
''' <param name="paras"></param>
''' <returns></returns>
''' <remarks></remarks>
Public Function ExecuteNoQuery(cmdText As String, cmdType As CommandType, paras As SqlParameter()) As Integer
Dim ConnStr As String = System.Configuration.ConfigurationManager.AppSettings("ConnStr")
Dim conn As SqlConnection = New SqlConnection(ConnStr)
'定义一个命令对象
Dim cmd As New SqlCommand
cmd = New SqlCommand(cmdText, conn) 'budong
cmd.CommandType = cmdType
cmd.Parameters.AddRange(paras)
Dim res As Integer '定义一个变量用户存放返回结果 Try
'打开数据库
If conn.State = ConnectionState.Closed Then conn.Open()
End If res = cmd.ExecuteNonQuery()
Catch ex As Exception
MsgBox(ex.Message, "数据库操作")
Finally
'关闭数据库
If conn.State = ConnectionState.Open Then
conn.Close()
End If
End Try
Return res '返回受影响的行数
End Function ''' <summary>
''' 无参数的增、删、改操作
''' </summary>
''' <param name="cmdText"></param>
''' <param name="cmdType"></param>
''' <returns></returns>
''' <remarks></remarks>
Public Shared Function ExecuteNoQuery(cmdText As String, cmdType As CommandType) As Integer
Dim ConnStr As String = System.Configuration.ConfigurationManager.AppSettings("ConnStr")
Dim conn As SqlConnection = New SqlConnection(ConnStr) Dim cmd As New SqlCommand '定义一个命令对象
cmd.CommandType = cmdType cmd = New SqlCommand(cmdText, conn)
Dim res As Integer '定义一个变量用户存放返回结果
'cmd.Parameters.AddRange(paras) 该方法没有参数,不用添加
Try
'打开数据库
If conn.State = ConnectionState.Closed Then conn.Open()
End If res = cmd.ExecuteNonQuery()
Catch ex As Exception
MsgBox(ex.Message, "数据库操作")
Finally
'关闭数据库
If conn.State = ConnectionState.Open Then
conn.Close()
End If
End Try
'返回受影响的行数
Return res
End Function ''' <summary>
''' 有参数的查询操作
''' </summary>
''' <param name="cmdTxt"></param>
''' <param name="cmdType"></param>
''' <param name="paras"></param>
''' <returns></returns>
''' <remarks></remarks>
Public Function GetDataTable(ByVal cmdTxt As String, ByVal cmdType As CommandType, ByVal paras As SqlParameter()) As DataTable
Dim strConnStr As String = System.Configuration.ConfigurationManager.AppSettings("ConnStr")
'定义一个数据库连接对象
Dim conn As SqlConnection = New SqlConnection(strConnStr)
'定义一个命令对象
Dim cmd As New SqlCommand
Dim adataset As DataSet
'定义一个适配器对象
Dim adaptor As SqlDataAdapter
cmd = New SqlCommand(cmdTxt, conn)
adaptor = New SqlDataAdapter(cmd)
adataset = New DataSet
cmd.CommandType = cmdType
cmd.Parameters.AddRange(paras)
Try
'打开数据库连接
If conn.State = ConnectionState.Closed Then
conn.Open() End If
'填充数据集
adaptor.Fill(adataset)
Return adataset.Tables(0)
Catch ex As Exception
MsgBox(ex.Message)
Finally
'关闭数据库连接
If conn.State = ConnectionState.Open Then
conn.Close() End If
End Try End Function ''' <summary>
''' 无参数的查询操作
''' </summary>
''' <param name="cmdTxt"></param>
''' <param name="cmdType"></param>
''' <returns></returns>
''' <remarks></remarks>
Public Function GetDataTable(ByVal cmdTxt As String, ByVal cmdType As CommandType) As DataTable
Dim strConnStr As String = System.Configuration.ConfigurationManager.AppSettings("ConnStr")
'定义一个数据库连接对象
Dim conn As SqlConnection = New SqlConnection(strConnStr)
'定义一个命令对象
Dim cmd As New SqlCommand
Dim adataset As DataSet
'定义一个适配器对象
Dim adaptor As SqlDataAdapter
cmd = New SqlCommand(cmdTxt, conn)
adaptor = New SqlDataAdapter(cmd)
adataset = New DataSet
cmd.CommandType = cmdType
'cmd.Parameters.AddRange(paras) 没有参数,无需添加
Try
'打开数据库连接
If conn.State = ConnectionState.Closed Then
conn.Open() End If
'填充数据集
adaptor.Fill(adataset)
Return adataset.Tables(0)
Catch ex As Exception
MsgBox(ex.Message, , "数据库操作")
Finally
'关闭数据库连接
If conn.State = ConnectionState.Open Then
conn.Close() End If
End Try End Function End Class

类有了,那怎么用呢?

有了参数,不就可以调用了。

CmdTxt就是sql语句。

CommandType有三个属性:StoredProcedure(存储过程),TableDirect(表),text(SQL文本命令,较常用)。

SqlParameter属性:在写sql语句的时候我们会定义变量,SqlParameter就是用来给数据库中定义的变量传值用的。

例如:

Dim paras As SqlParameter() = {New SqlParameter("@cardno", student.cardno)}

@cardno是变量,student.cardno是实体的值。

注意:Add与AddRange的区别

Add:将指定的对象添加到……中,AddRange:向……末尾,添加数组

Add该方法每次只能添加一个SqlParameter。AddRange可添加多个SqlParameter。在群里操作时,使用AddRange取代Add。

这样,我们的SqlHelper小助手就可以帮助完善我们的代码了。遇到一个问题,不用恐惧,先把它简单化,等我们对它有了一定的理解后再去看它复杂的地方。当我们可以灵活的使用ExecuteNonQuery、ExecuteReader、ExecuteDataSet的方法后,其他的内容也就不会难倒我们了。

SqlHelper——数据库小助手的更多相关文章

  1. DbHelper-SQL数据库访问助手

    using System; using System.Data; using System.Data.SqlClient; namespace Whir.Software.Framework.Ulti ...

  2. [原]DbHelper-SQL数据库访问助手

    using System; using System.Data; using System.Data.SqlClient; namespace Whir.Software.Framework.Ulti ...

  3. 发布代码小助手V2.1发布了——Code2HTML工具

    设计起源: 新浪博客似乎没有插入代码的功能,所以不得不用打空格的方法格式化代码.而且没法显示行号. 描述: 发布代码小助手用python和Tkinter开发,可以在任何常见操作系统上运行.主要用于在不 ...

  4. 书签小助手V1.1发布了

    更新信息: 1.修改了部分BUG;2.添加了一些不错的网站:3.重新设计了添加书签和编辑书签的界面. 安装说明: 类Ubuntu系统: 1.安装Python3解释器和Python3-tk sudo a ...

  5. 环境监测小助手V1.1的Windows版

    环境监测小助手V1.1——可以实时查看空气质量和城市排名 一款跨平台空气质量监测软件 数据来源互联网,请联网使用. 暂不支持效果预览. 下载地址:http://files.cnblogs.com/py ...

  6. Windows版词汇小助手V3.0发布了

    欢迎使用词汇小助手 作者:IT小小龙 电子邮箱:long_python@126.com 个人博客:http://blog.sina.com.cn/buduanqs 一款跨平台词汇查询记忆学习软件. 已 ...

  7. 词汇小助手V3.0发布了——不只是一个查单词的软件

    欢迎使用词汇小助手 作者:IT小小龙 电子邮箱:long_python@126.com 个人博客:http://blog.sina.com.cn/buduanqs 一款跨平台词汇查询记忆学习软件. 已 ...

  8. 生日小助手V4.0——迁移到Python3

    生日小助手V4.0——迁移到Python3 生日小助手V4.0只支持Linux系统,依赖命令行软件lunar Ubuntu系统安装方法:1.安装lunarsudo apt-get install lu ...

  9. DEDECMS-helper小助手扩展

    今天在做DEDE动态调用模板的时候卡住了,后终被强大的互联网解决,记录解决问题的过程,以备后用 可以在/data/helper.inc.php中进行默认小助手初始化的设置,系统默认载入小助手 例如创建 ...

随机推荐

  1. Media所有参数汇总

    Media所有参数汇总 我们最常需要用到的媒体查询器的三个特性,大于,等于,小于的写法.媒体查询器的全部功能肯定不止这三个功能,下面是我总结的它的一些参数用法解释: width:浏览器可视宽度. he ...

  2. JS isArray、typeof、instanceof

    Array.isArray() 用来检验是不是数组 var a = [1,2,3] console.log(typeof a); // object console.log(Array.isArray ...

  3. 小程序weapp的状态管理 Wenaox

    Wenaox wechat state management 特点 支持中间件 中大型项目可多个 contro 区分模块 asyncs 自带 loading 轻量.性能好 安装 npm i -S we ...

  4. MYSQL SQL高级查询技巧

    1.UNION,EXCEPT,INTERSECT运算符 A,UNION 运算符 UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表. ...

  5. Java设置模式

    单例模式 装饰者模式 代理模式

  6. python QQ邮件发送邮件

    # -*- coding: UTF-8 -*- import smtplib from email.mime.text import MIMEText from email.header import ...

  7. 笔记-selenium+chrome headless

    笔记-selenium+chrome headless 1.      selenium+chrome headless phantomjs与selenium分手了,建议使用其它无头浏览器. chro ...

  8. 菜鸟学Linux - Tarball安装的一般步骤

    所谓的Tarball软件,实际上指的是从网络上下载到的源码包.通常是以.tar.gz和tar.bz2结尾.至于gz和bz2的区别在于压缩算法的不同(bz2的压缩效果好像好一些).源码包下载完成后,需要 ...

  9. PHP.25-TP框架商城应用实例-后台2-商品列表页-搜索、翻页、排序

    商品列表页 1.翻页 控制器GoodsController.class.php添加方法lst(),显示列表页 在商品模型GoodsModel.class.php类中添加search方法 /** *实现 ...

  10. 解决boostrap-table有水平和垂直滚动条时,滚动条滑到最右边表格标题和内容单元格无法对齐的问题

    问题:boostrap-table有水平和垂直滚动条时,滚动条不高的时候(滚动高度比较大的时候没有问题),滚动条滑到最右边表格标题和内容单元格无法对齐的问题 问题原因:bootstrap-table源 ...