机房收费系统个人重构关于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了,!或许是由于有第一次的机房收费系统的经验,这次做,感觉很亲切. 在业务逻辑方面,沿袭曾经的逻辑.做了一点升级.可是修改不大. 在数据库方面,感觉自己从一个小 ...
随机推荐
- .Net4.0 ashx页面报错:检测到有潜在危险的Request.Form值(转)
原地址:http://zzhi191.blog.163.com/blog/static/1350849520111116518067/ web开发中难免要多到ajax技术. asp.net中我们处理a ...
- Android APK安装过程介绍
课题路径:从Myfile中点击应用进行安装,到安装完成,过程分析 思想方法:在研究PreloadInstaller的时候我们直接从整个apk的文件结构入手,由整体到部分的分析:但现在整个PMS非常庞大 ...
- SQL的四种语言和数据库范式
1. SQL的四种语言 DDL(Data Definition Language)数据库定义语言 CREATE ALTER DROP TRUNCATE COMMENT RENAME DML(Data ...
- awk 多分隔符
#!/bin/bash log_path="./log/" dates=`date -d '-1 days' +'%Y%m%d'` cd $log_path; for i in ` ...
- WINDOWS 7下安装CVXOPT
闹腾了好几天,终于将CVXOPT安装成功,这里和大家分享安装过程: 从www.python.org下载并安装Python.接下来,使用Python 2.7.5(32bit)版本(注意:64位win 7 ...
- WPF后台访问XAML元素
当我们需要从后台访问xaml文件时,我们可以通过这样的方式来操作: private void button1_Click(object sender, RoutedEventArgs e) { Sys ...
- "The connection for the USB device '###' was unsuccessful. The device is currently in use"
一.问题描述 1.情景描述 笔者的物理主机系统是“windows7 64位”,想使用“摄像头录像大师”.这个软件在录制视频的过程中,需要调用windows自带的"windows media ...
- www.nygwkt.com
南京宁阳制冷设备维修有限公司是专业从事厨房空调,http://www.nygwkt.com岗位空调制冷设备设计.制造.安装.改造.维修.保养的专业化公司.在南京享有很高的客户评论. 我们对南京宁阳制冷 ...
- 【关于php】Appserv的安装注意事项
之前的安装,问题应该不大,一路点“安装——Next——next·····”就行,下面是一些注意事项: (1)AppServ安装路径的选择.具体安装在哪个磁盘下用户可以自行选择,也可以使用默认的安装位置 ...
- uploadify 自定义按钮样式
uploadify是一款不错的JQUERY上传插件,但是FLASH按钮的外挂往往跟我们网页的设计不太搭配.一开始我还试图反编译uploadify.swf来修改其外观,结果发现反编译为FLA后里面没有任 ...