机房收费系统个人重构关于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了,!或许是由于有第一次的机房收费系统的经验,这次做,感觉很亲切. 在业务逻辑方面,沿袭曾经的逻辑.做了一点升级.可是修改不大. 在数据库方面,感觉自己从一个小 ...
随机推荐
- 浏览器阻止window.open的解决方案
先分析一下浏览器为什么会阻止window.open吧:用户主动去触发事件的浏览器不会阻止,什么是用户主动触发的呢?就是当用户去点击的一瞬间就弹出这种浏览器是不会阻止的,如果是通过setTimeout定 ...
- 一. 什么是ANR?为什么会有ANR发生?
对于Android平台的工程师来说,ANR应该是每个人都会遇到的问题,因为导致它的原因有很多,例如在主线程进行耗时操作,调用大量cpu资源进行复杂的预算等,并且可能在大多数情况下,这类问题不会发生,只 ...
- IS---InstallShield第二天
在Setup.rul中,新增OnBegin函数 STRING str1,spath,szApplicationPath,szApplicationCmdLine,szCmdLine;function ...
- Android Binder机制简单了解
Binder -- 一种进程间通信(IPC)机制, 基于OpenBinder来实现 毫无疑问, 老罗的文章是不得不看的 Android进程间通信(IPC)机制Binder简要介绍和学习计划 浅谈Ser ...
- 简单学C——第二天
控制结构(-) 相信大家对流程图肯定很熟悉.下面我将介绍的正是关于此方面的,c语言中,控制结构大体分为选择结构和循环结构. 一.选择结构: 先贴出一般用于选择结构的语 ...
- 阿里云ECS服务器配置ubuntu安装openfire服务器
最近搞了一台阿里云的ECS服务器,因为搞活动半年免费,所以就申请了一台,过两天就批准下来,顺便多花了1百多RMB买了固定IP.总体说来还是挺值的,觉得一个人用挺浪费,分享出来跟大家一起玩玩. 搞台服务 ...
- 配有Tesla K40c的服务器新装Ubuntu16.04并安装CUDA8.0、Anaconda3、Matlab2016a、OPENCV3.1、CuDNN5.1、MXNet
注:本文原创,作者:Noah Zhang (http://www.cnblogs.com/noahzn/) 决定加入深度学习的大军,感谢导师给配了台新设备!第一次接触服务器并配置开发环境,整个过程中 ...
- perl 获取虚拟机信息
[root@master ~]# cat simple_flow.pl ! /usr/bin/perl -w use strict; use warnings; 导入 vSphere SDK for ...
- 服务器RAID配置全程与RAID基础知识
服务器RAID配置全程 一.RAID介绍 RAID是Redundent Array of Inexpensive Disks的缩写,直译为“廉价冗余磁盘阵列”,也简称为“磁盘阵列”.后来RAID中的字 ...
- Robotium跨应用处理方法
相信用过一段时间Robotium的同学一般都遇到过如下情况:界面跳转到被测程序外以后,Robotium就毫无对策了,这也是Instrumentation框架最致命的一个缺点;然而领导是不会管你这些很“ ...