SqlHelper——数据库小助手
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——数据库小助手的更多相关文章
- DbHelper-SQL数据库访问助手
using System; using System.Data; using System.Data.SqlClient; namespace Whir.Software.Framework.Ulti ...
- [原]DbHelper-SQL数据库访问助手
using System; using System.Data; using System.Data.SqlClient; namespace Whir.Software.Framework.Ulti ...
- 发布代码小助手V2.1发布了——Code2HTML工具
设计起源: 新浪博客似乎没有插入代码的功能,所以不得不用打空格的方法格式化代码.而且没法显示行号. 描述: 发布代码小助手用python和Tkinter开发,可以在任何常见操作系统上运行.主要用于在不 ...
- 书签小助手V1.1发布了
更新信息: 1.修改了部分BUG;2.添加了一些不错的网站:3.重新设计了添加书签和编辑书签的界面. 安装说明: 类Ubuntu系统: 1.安装Python3解释器和Python3-tk sudo a ...
- 环境监测小助手V1.1的Windows版
环境监测小助手V1.1——可以实时查看空气质量和城市排名 一款跨平台空气质量监测软件 数据来源互联网,请联网使用. 暂不支持效果预览. 下载地址:http://files.cnblogs.com/py ...
- Windows版词汇小助手V3.0发布了
欢迎使用词汇小助手 作者:IT小小龙 电子邮箱:long_python@126.com 个人博客:http://blog.sina.com.cn/buduanqs 一款跨平台词汇查询记忆学习软件. 已 ...
- 词汇小助手V3.0发布了——不只是一个查单词的软件
欢迎使用词汇小助手 作者:IT小小龙 电子邮箱:long_python@126.com 个人博客:http://blog.sina.com.cn/buduanqs 一款跨平台词汇查询记忆学习软件. 已 ...
- 生日小助手V4.0——迁移到Python3
生日小助手V4.0——迁移到Python3 生日小助手V4.0只支持Linux系统,依赖命令行软件lunar Ubuntu系统安装方法:1.安装lunarsudo apt-get install lu ...
- DEDECMS-helper小助手扩展
今天在做DEDE动态调用模板的时候卡住了,后终被强大的互联网解决,记录解决问题的过程,以备后用 可以在/data/helper.inc.php中进行默认小助手初始化的设置,系统默认载入小助手 例如创建 ...
随机推荐
- System.IO 二
接着上篇的来 System.IO FileSystemWatcher 指向这个签名的方法 可以监听目录发生了什么事件 例如: static void Main(string[] args) ...
- checkboxlist如何配置数据源?
在做项目中,通常checkboxlist中的checkitems不是固定的,需要绑定可变的数据源,把数据添加到list集合中,代码如下 DataSet myData = new DataSet(); ...
- java基础30问
Java基础知识30问 1. 面向对象和面向过程的区别 面向过程 优点: 性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗资源;比如单片机.嵌入式开发.Linux/Unix等一般采用 ...
- 通过ip地址访问同一局域网下已经启动的angular项目
通常tomcat启动的项目同一局域网下我们都可以访问.angular启动的前台项目别人怎么访问,一直不懂,后来知道启动命令加个参数就行了 首先查看本机ip 第二步,启动命令里加上--host 本机ip ...
- Exception occurred during processing request: The given object has a null identifier: com.zsn.crm.Model.SaleVisit; nested exception is org.hibernate.TransientObjectException: The given object has a nu
edit.jsp页面没有加入隐藏字段 id ,导致模型驱动封装时缺少id ,,调用update更新数据库时出错!
- PHP siege 压测 QPS大小
1.使用 PHP-FPM SOCKET的形式通讯 2.配置 PHP-FPM配置 [root@bogon php-fpm.d]# ls -al 总用量 drwxr-xr-x. root root 8月 ...
- python__基础 : sys模块: sys.argv与sys.path
sys模块中的 argv 保存的是当你运行一个py文件的时候给他传递进去的参数,如: import sys a = sys.argv print(a) # 当在命令行中调用这个py文件: > p ...
- Laravel操作上传文件的方法
1.获取上传的文件 $file=$request->file('file');2.获取上传文件的文件名(带后缀,如abc.png) $filename=$file->getClientOr ...
- thymelef模板报错 the entity name must immediately follow the '&' in the entity reference
thymelef模板里面是不能实用&符号的 要用&转义符代替,官网也有文档说明可以用官方的通配符代替,官方文档http://www.thymeleaf.org/doc/tutorial ...
- Python全栈day 04
Python全栈day 04 一.解释器/编译器 补充:编译型语言和解释型语言? # 编译型:代码写完后,编译器将其变成成另外一个文件,然后交给计算机执行. c c++,c# ,java # 解释型: ...