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. ASP.NET中无刷新分页

    上次介绍了我们代码写的刷新分页,这次就来说说无刷新分页. 这次我们是在上次的基础上改动了一些,我们都知道想要无刷新,就需要Ajax,在我们的ASP.NET中AJax是和一般处理程序配合着用的. 无刷新 ...

  2. parameter server

    http://zeromq.org ZeroMQ \zero-em-queue\, \ØMQ\: Ø  Connect your code in any language, on any platfo ...

  3. js最佳实践

    JavaScript使用windows对象的open()方法来创建新的浏览器窗口,这个方法有三个参数:windows.open(url,name,features) 参数一:url:是想在新窗口里打开 ...

  4. 牛客小白月赛1 J おみやげをまらいました 【MAP】

    链接:https://www.nowcoder.com/acm/contest/85/J おみやげをまらいました!    蛙蛙还是给你带来了礼物.但它有个小小的要求,那就是你得在石头剪刀布上赢过它才能 ...

  5. Spring Cloud 入门 Consul-Server服务注册

    前面见过 Eureka服务注册,需要单独启用一个springboot项目  :这里介绍一个 spring cloud consul 服务, 只需要安装相关客户端,启动它就行: 1.安装Consul(以 ...

  6. 前端之jquery函数库

    jquery介绍 jQuery是目前使用最广泛的javascript函数库.据统计,全世界排名前100万的网站,有46%使用jQuery,远远超过其他库.微软公司甚至把jQuery作为他们的官方库. ...

  7. IDEA的使用方法(一)(IDEA基本快捷键)

    一个软件的快捷键显得尤为重要,接下来来讲讲快捷键 CTR+N 搜索类 CTR+SHIT+N 搜索文件 CTR+ALT+空格 代码提示(类似于 ALT+/) ALT+F7 查询在某处使用 CTR+Q 查 ...

  8. python__系统 : socket_TCP相关

    tcp和udp对比起来.还是tcp相对稳定一些,但是因为有三次挥手和四次握手,以及确认包(ack)的存在,可能在速度上会比udp慢. 用python的socket模块可以建立tcp服务端: from ...

  9. C语言函数篇(一)函数的组成

    函数的组成: 函数名 输入参数 返回值 返回值 函数名 (输入参数){ 执行体 } 用指针保存函数: int func(int a, int b, char c){ } --> int (*fu ...

  10. POJ 3484 二分

    Showstopper Description Data-mining huge data sets can be a painful and long lasting process if we a ...