机房收费系统个人重构关于SQLHelper
近期在敲机房,对于SQLHelper也是心里有些怵,由于原来没用过,可是看了一些博客和资料后发现,假设不用这个类,会大大添加代码量,并且,事实上它并不新,它是一个有多个关于数据库增删改查操作的语句函数的类,使用这个类能够方便D层调用,对数据库的操作,我们无非就是增删改查,而函数就是有无參数,有无返回值,SQLHelper是个新词,只是我们却一直在用,仅仅是我们不这么叫,之所以叫SQLHelper,理所当然它是D层操作数据的助手,
在SQLHelper类中实现的方法包含:
以下用代码来展示一下这个类:
在用SQLHelper之前,我们要先用配置文件配置连接字符串,这样有利于在client更改数据库:
<appSettings >
<add key ="Connstr" value ="datasource=.;database=ChargeSys;uid=sa;password=123456" />
</appSettings>
这样就能够在SQLHelper中方便的使用连接字符串了,无论数据库怎么换,对源代码都没有影响:
Imports System.Data
Imports System.Configuration
Imports System.Data.SqlClient
Public Class SqlHelper
'获得数据库连接字符串
Private ReadOnly strConn As String = ConfigurationManager.AppSettings("Connstr")
'新建连接
Dim connSQL As SqlConnection = New SqlConnection(strConn)
'定义命令
Dim cmdSQL As New SqlCommand
''' <summary>
''' 运行增删改,有參,确认是否运行成功
''' </summary>
''' <param name="cmdSQLText">须要运行的数据库语句</param>
''' <param name="cmdSQLType">数据语句的类型,可能是sql类型,也可能是存储过程等</param>
''' <param name="sqlParams">參数数组,无法确定有多少參数</param>
''' <returns>返回受影响行数</returns>
''' <remarks></remarks>
Public Function ExecuteAddDelUpdate(ByVal cmdSQLText As String, ByVal cmdSQLType As CommandType, ByVal sqlParams As SqlParameter()) As Integer
cmdSQL.Parameters.AddRange(sqlParams) '将參数传入
cmdSQL.CommandType = cmdSQLType '确定语句类型,是sql还有oracle还是其它类型
cmdSQL.CommandText = cmdSQLText '将sql语句传给cmdSQL
cmdSQL.Connection = connSQL '设置连接,全局变量 '開始运行查询
Try
connSQL.Open() '打开连接
Return cmdSQL.ExecuteNonQuery() '运行查询
cmdSQL.Parameters.Clear() '清除參数
Catch ex As Exception
Return 0
Finally
Call CloseConnection(connSQL)
Call CloseSQLCommand(cmdSQL)
End Try End Function
''' <summary>
''' 运行增删改,有參,确认是否运行成功
''' </summary>
''' <param name="cmdText">须要运行的数据库语句</param>
''' <param name="cmdType">数据语句的类型,一般为Sql语句,不是存储过程</param>
''' <returns>返回受影响的行数</returns>
''' <remarks></remarks>
Public Function ExecuteAddDelUpdate(ByVal cmdText As String, ByVal cmdType As CommandType) As Integer
cmdSQL.CommandType = cmdType '确定语句类型,是sql还有oracle还是其它类型
cmdSQL.CommandText = cmdText '将sql语句传给cmdSQL
cmdSQL.Connection = connSQL '设置连接,全局变量 '開始运行查询
Try
connSQL.Open() '打开连接
Return cmdSQL.ExecuteNonQuery() '运行查询
cmdSQL.Parameters.Clear() '清除參数
Catch ex As Exception
Return 0
Finally
Call CloseConnection(connSQL)
Call CloseSQLCommand(cmdSQL)
End Try End Function
''' <summary>
''' 运行查询操作,有參,返回datatable类型
''' </summary>
''' <param name="cmdText">须要运行的数据库语句,一般SQL语句,也有存储过程</param>
''' <param name="cmdType">数据语句的类型,一般为Sql语句,不是存储过程</param>
''' <param name="sqlParams">參数数组,不确定有多少參数数组</param>
''' <returns>返回datatable类型</returns>
''' <remarks></remarks>
Public Function ExecuteSelect(ByVal cmdText As String, ByVal cmdType As CommandType, ByVal sqlParams As SqlParameter()) As DataTable
Dim sqlAdapter As SqlDataAdapter
Dim dtSQL As New DataTable
Dim dsSQL As New DataSet cmdSQL.CommandText = cmdText
cmdSQL.CommandType = cmdType
cmdSQL.Connection = connSQL
cmdSQL.Parameters.AddRange(sqlParams)
sqlAdapter = New SqlDataAdapter(cmdSQL) Try
sqlAdapter.Fill(dsSQL)
dtSQL = dsSQL.Tables(0) 'datatable为dataSet的第一个表
cmdSQL.Parameters.Clear()
Catch ex As Exception
MsgBox("查询失败", CType(vbOKOnly + MsgBoxStyle.Exclamation, MsgBoxStyle), "警告")
Finally
Call CloseSQLCommand(cmdSQL)
End Try Return dtSQL End Function
''' <summary>
''' 运行查询操作,无參,返回datatable类型
''' </summary>
''' <param name="cmdText">须要运行的数据库语句,一般SQL语句,也有存储过程</param>
''' <param name="cmdType">数据语句的类型,一般为Sql语句,不是存储过程</param>
''' <returns>返回datatable类型</returns>
''' <remarks></remarks>
Public Function ExecuteSelect(ByVal cmdText As String, ByVal cmdType As CommandType) As DataTable
Dim sqlAdapter As SqlDataAdapter
Dim dtSQL As New DataTable
Dim dsSQL As New DataSet cmdSQL.CommandText = cmdText
cmdSQL.CommandType = cmdType
cmdSQL.Connection = connSQL
sqlAdapter = New SqlDataAdapter(cmdSQL) '实例化adapter Try
sqlAdapter.Fill(dsSQL) '用dsSQL填充sqlAdapter
dtSQL = dsSQL.Tables(0)
Catch ex As Exception
Call CloseSQLCommand(cmdSQL)
End Try Return dtSQL End Function
''' <summary>
''' 关闭连接
''' </summary>
''' <param name="connSQL">须要关闭连接</param>
''' <remarks></remarks>
Public Sub CloseConnection(ByVal connSQL As SqlConnection)
If (connSQL.State <> ConnectionState.Closed) Then '假设没有关闭
connSQL.Close() '关闭连接
connSQL = Nothing '不指向原对象
End If
End Sub
''' <summary>
''' 关闭命令
''' </summary>
''' <param name="cmdSQL">须要关闭命令</param>
''' <remarks></remarks>
Public Sub CloseSQLCommand(ByVal cmdSQL As SqlCommand)
If Not IsNothing(cmdSQL) Then '假设存在命令
cmdSQL.Dispose() '将命令销毁
cmdSQL = Nothing End If
End Sub
End Class
SQLHelper将数据库操作语句分为了两类,一类是增删改、一类是查,这两类又分别有有參和无參两种,这些在D层有多个类须要操作数据库时,我们仅仅须要调用这里的类,假设有參,仅仅须要把參数穿进去即可了,以下看一看在D层我们是怎么用它的:
Imports System.Data
Imports System.Data.SqlClient
Imports DALHelper
Imports IDAL
Imports Entity
Public Class LoginDAL : Implements IDAL.ILogin
Public Function SelectUser(user As UserInfoEntity) As DataTable Implements ILogin.SelectUser
Dim cmdText As String
Dim sqlhelper As New SqlHelper
Dim dtSQL As DataTable
Dim sqlParams As SqlParameter() cmdText = "select * from T_UserInfo where UserName=@UserName and Password=@Password"
sqlParams = {New SqlParameter("@UserName", user.UserName), New SqlParameter("@Password", user.Password)}
dtSQL = sqlhelper.ExecuteSelect(cmdText, CommandType.Text, sqlParams) Return dtSQL End Function
End Class
这里运行的有參查询函数ExcuteSelect,对于SQLHelper的理解还有待提高,希望大家多多指正!
机房收费系统个人重构关于SQLHelper的更多相关文章
- VB.NET<机房收费系统个人重构版>你都学会了什么(之五)
接着上篇我们说的配置文件,今天我们来说一下接口. 1.UML图 2.三层架构 3.Sqlhelper 4.配置文件 5.接口 6.设计模式 什么是接口呢?我们可以将接口理解为用于沟通的中介的抽象化.可 ...
- vb.net机房收费系统之组合查询
我个人一直认为,组合查询是机房收费系统的一个难点,尤其是用到三层之后,如果要为组合查询中的每一个查询建立一个显然是太麻烦了. 下面介绍一下我的方法,对大家起个参考作用. 我将该表中可输入的内容定义为一 ...
- 机房收费系统(VB.NET)——存储过程实战
最初接触存储过程是在耿建玲老师的视频里,当初仅仅是草草过了一遍.仅仅是有了个印象.知道了这个名词:大二时也有SqlServer数据库这门课,只是老师没讲,自己也没看:真正对存储过程的了解来自于自学考试 ...
- VB.NET版机房收费系统---七仙女之系统登录
VB.NET第一版机房收费系统,告一段落,验收的时候.问题也是大大的存在,没实用上设计模式,什么触发器.存储过程,都没实用上.看看其她小伙伴的,七层实现登录?那是什么东东,相比較我的三层而言,多了两倍 ...
- VB.NET 机房收费系统项目总结
VB.NET机房收费系统项目总结 从2013年5月3日——2013年8月20日历时三个多月的.NET机房收费系统终于完成了.项目做完了,真有一种如释重负的感觉. 下面我将从文档.UML图,代码这三个方 ...
- 机房收费系统——转换list泛型时,字段名称不正确应出现故障
因为之前对泛型研究了一番,所以就開始尝试着在机房收费系统重构中增加了泛型的使用. 可是到了做学生查看剩余金额这个功能的时候,还是依照之前的方法做的,可是在载入数据的时候班级这个框就没有显示出来--然后 ...
- .NET分层登陆——机房收费系统再总结
去年的时候,我写过一篇机房收费系统登陆的总结文章,那是站在VB的基础上,直接查询数据库实现的登陆.是很初期的知识.如果想了解详情,请看VB查询数据库之登陆窗体--机房收费系统总结(一). 今天,我要换 ...
- 机房收费系统(VB.NET)——超具体的报表制作过程
之前做机房收费系统用的报表是Grid++Report,这次VB.NET重构中用到了VisualStudio自带的报表控件. 刚開始当然对这块功能非常不熟悉,只是探究了一段时间后还是把它做出来了. 以下 ...
- 小结:VB.NET机房收费系统个人版
经过几天的缝缝补补,自己的个人版最终OK了,!或许是由于有第一次的机房收费系统的经验,这次做,感觉很亲切. 在业务逻辑方面,沿袭曾经的逻辑.做了一点升级.可是修改不大. 在数据库方面,感觉自己从一个小 ...
随机推荐
- 纯JS写出日历
封装代码: (function(cmf){ cmf.showDcalendar=function(){ var fnname=cmf.fn var id="cmfrili2" va ...
- 搭建laravel5全面教学,爬坑(windows下)。
1.首先下载屌比的Composer 2.然后下载composer.phar 3.然后下载最新版Laravel框架 4.将下载下来的laravel压缩包扔到htdocs目录下(扔到别的目录没试过) 5. ...
- phpcms v9使用GET调用指定id文章内容、页面数据方法
不知道大家有没有相同的体会?在使用Phpcms V9建站调用数据的时候,基础的数据用默认的模板的调用语句就好了,但复杂不常见的数据怎么调用呢?我们技术可能会研究半天,怀着探索的精神不断尝试.孜孜不倦. ...
- webform的三级联动
webform的三级联动 与winform一样,只不过需把DropDownList的AutoPostBack属性改为True. *简单日期的编写方法:用是三个DropDownList分别代表年月日,用 ...
- INI解析模块的C++实现
INI文件格式是某些平台或软件上的配置文件的非正式标准,以节(section)和键(key)构成,常用于微软Windows操作系统中. 节(section) 节用方括号括起来,单独占一行,例如: [s ...
- 趣味C程序100.9 绘制杨辉三角
说明:1.本问题来源于<C语言经典.趣味.实用程序设计编程百例精解>,所有程序为本人自己编写.与原程序不同之处作有标记. 2.本系列所有程序均使用codeblocks编译,操作系统为Win ...
- LightOj_1284 Lights inside 3D Grid
题目链接 题意: 给一个X * Y * Z 的立方体, 每个单位立方体内都有一盏灯, 初始状态是灭的, 你每次操作如下: 1)选择一个点(x1, y1, z1) 再选择一个点(x2, y2, ...
- mysql 中创建存储过程
mysql中创建存储过程和存储函数虽相对其他的sql语言相对复杂,但却功能强大,存储过程和存储函数更像是一种sql语句中特定功能的一种封装,这种封装可以大大简化外围调用语句的复杂程度. 首先以表emp ...
- 如何用 React Native 创建一个iOS APP?
诚然,React Native 结合了 Web 应用和 Native 应用的优势,可以使用 JavaScript 来开发 iOS 和 Android 原生应用.在 JavaScript 中用 Reac ...
- Git入门简介
1. Git 背景 Git 最初由Linus Torvalds编写,用于 Linux 内核开发的版本控制工具. Git 与常用的版本控制工具 CVS.Subversion 等不同,它采用了分布式版本 ...