之前敲完七层登陆之后,我天真的认为Sqlhelper就只是由一个function组成!!后来看到大家的博客,原来是由好几个function组成的,每个function都对应特定的数据库增删改查!现在想想真是三千世界一口井,我看世界大如饼!自己的浏览量还要增强。。
在整个机房收费系统中,具体操作数据库的function大概可分为五种,它们分别是执行含参和无参的查询操作,执行含参和无参的增删改操作,以及关闭数据库链接的操作这五种。接下来我们依次讲解一下这五种操作以及看看它们的生成代码。
含参和无参的查询
刚开始的时候,我转不过弯儿来,不理解含参与无参有什么区别,但随着自己敲代码的数量增多,对于机房收费的理解加深,原来是这样的。。当敲登陆的时候,只有输入用户名和密码后,才能查询数据库中的用户表,看看是否与输入的一致!由此可知要输入的用户名和密码就可以认定为参数,只有当参数与数据库中数据一致时,才能登陆成功;当我们查询正在值班教师的时候,我们不用在U层输入数据,直接点击命令按钮就可以显示出我们要查询的数据,这就是无参啦。。
在具体的代码中,它们的区别就是一个含参,一个无参(好无语的解释)在无参中,function的声明为:
Public Shared Function ExecSelectNO(ByVal sql As String, ByVal cmdType As CommandType) As DataTable不包含<span style="font-family: Arial, Helvetica, sans-serif;">SqlParameter</span>
'********************************
'作者:郭贤达
'小组:个人
'说明:数据库连接与关闭的具体化,将数据传给DAL层
'日期:2015.5.16
'版本号:V1.00
'********************************
Imports System.Data.SqlClient
Imports System.Configuration
Imports System.Data
Imports System.Reflection
Public Class sqlHelper
'shared是指定与某一类或结构的所有实例关联的一个或多个所声明的编程元素
''定义全局变量,获取数据库的连接字符串
Private Shared ConnectionString As String = ConfigurationManager.AppSettings("ConnString")
''建立数据库连接
Shared conn As SqlConnection = New SqlConnection(ConnectionString)
''定义命令变量.sqlcommand表示要对sqlserver数据库执行的一个T-SQL语句或存储过程
Shared cmd As SqlCommand
''' <summary>
''' 有参查询
''' </summary>
''' <param name="sql">执行增删改查SQL语句或存储过程</param>
''' <param name="cmdType">命令类型文本或存储过程</param>
''' <param name="sqlparams">参数数组</param>
''' <returns></returns>
''' <remarks></remarks>
Public Shared Function ExecSelect(ByVal sql As String, ByVal cmdType As CommandType, ByVal sqlparams As SqlParameter()) As DataTable
''定义数据适配器.用于填充dataset和更新sqlserver数据库的一组数据命令和一个数据库连接,不能被继承
Dim adapter As SqlDataAdapter
''定义并实例化数据缓冲对象,即从数据库传入的对象
Dim adataset As New DataSet
'在conn上面执行实例化命令变量,并执行语句cmdType
cmd = New SqlCommand(sql, conn)
''commandtype表示获取或设置一个值,该值指示如何解释commandText的属性
cmd.CommandType = cmdType
''addrange表示添加parameter值的数组
cmd.Parameters.AddRange(sqlparams)
''将结果绑定到数据适配器变量adaptor上面
adapter = New SqlDataAdapter(cmd)
Try
''如果数据库连接状态为关闭则将其打开
If conn.State = ConnectionState.Closed Then
conn.Open()
End If
''向adaptor对象中填充查询的数据
adapter.Fill(adataset)
''清除参数
cmd.Parameters.Clear()
Catch ex As Exception
''错误处理的程序,出错则提示
MsgBox(ex.Message, , "数据库操作")
Finally
''如果连接状态为打开则将其关闭,释放内存
If conn.State = ConnectionState.Open Then
conn.Close()
End If
End Try
''tables获取包含在dataset中的表的集合
Return adataset.Tables(0)
End Function
含参和无参的增删改
有了上面的基础,这个就更容易理解了。用户和学生注册都会用到含参的增删改,至于无参的增删改,我还没有遇到哎,遇到的童鞋冒个泡!!现在看看具体的代码
''' <summary>
''' 有参增删改
''' </summary>
''' <param name="sql">执行增删改查SQL语句或存储过程</param>
''' <param name="cmdType">命令类型文本或存储过程</param>
''' <param name="sqlparams">参数数组</param>
''' <returns></returns>
''' <remarks></remarks>
Public Shared Function ExecAddDelUpdate(ByVal sql As String, ByVal cmdType As CommandType, ByVal sqlparams As SqlParameter()) As Boolean
''定义变量,用来存放执行的结果
Dim result As Integer
cmd = New SqlCommand(sql, conn)
cmd.CommandType = cmdType
cmd.Parameters.AddRange(sqlparams)
Try
''如果数据库连接状态为关闭则将其打开
If conn.State = ConnectionState.Closed Then
conn.Open()
End If
''对连接执行T_SQL,并返回受影响的行,即执行增删改操作
result = cmd.ExecuteNonQuery()
''清除参数
cmd.Parameters.Clear()
Catch ex As Exception
''错误处理的程序,出错则提示
MsgBox(ex.Message, , "数据库操作")
Finally
''如果连接状态为打开则将其关闭,释放内存
If conn.State = ConnectionState.Open Then
conn.Close()
End If
End Try
''返回受影响的行
Return result
End Function
关闭数据库链接
这个不多做解释
''' <summary>
''' 关闭连接
''' </summary>
''' <param name="conn">需要关闭的连接</param>
''' <remarks></remarks>
Public Shared Sub CloseConn(ByVal conn As SqlConnection)
If conn.State = ConnectionState.Open Then
conn.Close()
''不指向原对象
conn = Nothing
End If
End Sub
总结
敲完SqlHelper后,我想大家都会有一个小小的发现,就是查询和增删改的function类型是不一样的。查询的类型为DataTable,增删改的类型为Boolean。我们为什么这样设计?!如果没有发现的同学可以想一想。。这些弄完之后,接下来就是组合查询和报表啦,会用到很多东西,如存储过程、触发器、泛型集合等,继续努力吧,下一篇博客我也不知道些什么。。