机房收费系统个人重构关于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了,!或许是由于有第一次的机房收费系统的经验,这次做,感觉很亲切. 在业务逻辑方面,沿袭曾经的逻辑.做了一点升级.可是修改不大. 在数据库方面,感觉自己从一个小 ...
随机推荐
- spin.js插件的转圈加载效果
先上插件链接地址:http://fgnass.github.io/spin.js/ 以下是使用spin.js插件的完整版测试例子: <!doctype html> <html> ...
- ubuntu修改主机名称
一.为何要修改主机名称 在安装Ubuntu时,一不小心主机名称输入的“too long”了,导致命令行上就提示符占据了一行的1/3,迫使我产生修改主机名称的冲动. 二.操作方法 原理:系统启动时,会从 ...
- git+Coding.netの小试牛刀
一.将本地项目推送到Coding中 1.在Coding中新建项目,填写项目名称和项目描述,设置属性,勾选初始化仓库
- iOS版 hello,world版本2
// // main.m // Hello // // Created by lishujun on 14-8-28. // Copyright (c) 2014年 lishujun. All rig ...
- deep learning framework(不同的深度学习框架)
常用的deep learning frameworks 基本转自:http://www.codeceo.com/article/10-open-source-framework.html 1. Caf ...
- 前端图片预览,上传前预览,兼容IE7、8、9、10、11,Firefox,Chrome(学习到的知识)
文章地址:http://www.cnblogs.com/rubylouvre/p/4597344.html 一.window.URL 在Chrome中,window.URL和window.webkit ...
- CSS3随笔系列之transform(一)—— transform-origin
transform-origin属性平时似乎用得很少,它决定了变换时依赖的原点.基本的属性特性可以参考CSS手册. 如果在H5动画项目中,用到旋转的话,它还是不能小觑的. 假如我们做一个秋千效果 其实 ...
- Install php-mcrypt on CentOS 6
http://stackoverflow.com/questions/17109818/install-php-mcrypt-on-centos-6
- Android开源项目发现--- 工具类文件处理篇(持续更新)
1.ZIP java压缩和解压库 项目地址:https://github.com/zeroturnaround/zt-zip 文档介绍:https://github.com/zeroturnaroun ...
- 【转】实现展开列ExpandableListView的三种方式之SimpleExpandableListAdapter实例
原文网址:http://blog.csdn.net/x605940745/article/details/12099709 实现可扩展展开列ExpandableListView的三种方式 欢迎加入QQ ...