背景介绍:首先说一下为什么要使用sqlhelper这个类,在我们敲机房收费系统的时候,我们连接数据库的时候都需要执行这样几个操作:1.定义各种数据类型2.打开数据库3.书写数据库查询语句4.定义参数,给数据赋值!!!等等这一系列的操作,但是写的多了就会发现这些代码都是重复的操作,这样重复的书写代码,在有的时候就是做的无用功,这时候sqlhelper就体现它的价值了,在这可以将这些重复的动作进行封装,封装成一个类,用的时候就直接调用就好啦!
- 首先,当我们写代码的时候最开始的就是定义,定义(打开)连接数据库的通道。
<span style="font-family:KaiTi_GB2312;font-size:18px;">Public Class SQLHelper
'获取配置文件中的连接字符串并赋值给下面的变量strConnection
Dim strConnection As String = ConfigurationManager.AppSettings("strSqlConnection")
'创建数据库连接
Dim conn As SqlConnection = New SqlConnection(strConnection)
'声明SqlCommand类变量cmd
Dim cmd As New SqlCommand ' 忘记加new关键字,加new是对其进实例化,也就是为其分配空间;不加new就是定义,不分配空间</span>
2.然后就是判断数据库是否打开
<span style="font-family:KaiTi_GB2312;font-size:18px;"> Private Sub CloseConn(ByVal conn As SqlConnection)
'如果没有关闭,则关闭连接
If (conn.State <> ConnectionState.Closed) Then
conn.Close()
conn = Nothing
End If
End Sub
''' <summary>
''' 关闭命令
''' </summary>
''' <param name="cmd">需要关闭的命令</param>
''' <remarks></remarks>
Private Sub CloseCmd(ByVal cmd As SqlCommand)
'如果没有关闭,则关闭命令
If Not IsNothing(cmd) Then
cmd.Dispose()
cmd = Nothing
End If
End Sub
''' <summary>
''' 有参数的 增删改 操作
''' </summary>
''' <param name="cmdText">需要执行的命令</param>
''' <param name="cmdType">所执行命令的类型,一般是Sql语句,也有可能是存储过程,或表</param>
''' <param name="sqlParams">参数数组</param>
''' <returns>返回执行 增删改 语句受影响的行数,为Integer类型</returns></span>
3.这些都书写完成之后就开始进行对数据库的增删改查操作了!
写这些操作的时候为了简便可以将增删改这些操作都放到一起,因为增删改的操作的返回值是数值(例:1行受影响),并且增删改多事对数据库进行操作,所以可以将这些归为一类。
<span style="font-family:KaiTi_GB2312;font-size:18px;"> ''' <summary>
''' 无参数的 增删改 操作
''' </summary>
''' <param name="cmdText">需要执行的命令</param>
''' <param name="cmdType">所执行命令的类型,一般是Sql语句,也有可能是存储过程,或表</param>
''' <returns>返回执行 增删改 语句受影响的行数,为Integer类型</returns>
Public Function ExecAddDelUpdateNo(ByVal cmdText As String,ByVal cmdType As CommandType) As Integer
'将传入的参数,分别为cmd的属性赋值
cmd.CommandType = cmdType '设置一个值,解释cmdText
cmd.Connection = conn '设置连接
cmd.CommandText = cmdText '设置查询的语句
'执行操作
Try
conn.Open() '打开连接
Return cmd.ExecuteNonQuery() '执行增删改操作并返回受影响的行数
cmd.Parameters.Clear() '清除参数
Catch ex As Exception
Return 0 '如果出错,返回0
Finally
Call CloseConn(conn) '关闭连接
Call CloseCmd(cmd) '关闭连接
End Try
End Function</span>
<span style="font-family:KaiTi_GB2312;font-size:18px;">''' <summary>
''' 有参数的 查询 操作
''' </summary>
''' <param name="cmdText">需要执行的命令</param>
''' <param name="cmdType">所执行命令的类型,一般是Sql语句,也有可能是存储过程,或表</param>
''' <param name="sqlParams">参数数组</param>
''' <returns>返回执行 查询 得到的结果,为DataTable类型</returns>
Public Function ExecSelect(ByVal cmdText As String,ByVal cmdType As CommandType,ByVal sqlParams As SqlParameter()) As DataTable
Dim sqlAdapter As SqlDataAdapter '声明适配器
Dim dt As New DataTable '声明数据表
Dim ds As New DataSet '声明数据缓存
'cmd = New SqlCommand(cmdText,conn)
cmd.CommandText = cmdText '设置查询的语句
cmd.CommandType = cmdType '设置一个值,解释cmdText
cmd.Connection = conn '设置连接
'将传入的值,分别为cmd的属性赋值
cmd.Parameters.AddRange(sqlParams) '将参数传入
sqlAdapter = New SqlDataAdapter(cmd) '实例化适配器
'执行操作
Try
sqlAdapter.Fill(ds) '用适配器对ds进行填充
dt = ds.Tables(0) '返回数据集的第一个表
cmd.Parameters.Clear() '清除参数
Catch ex As Exception
MsgBox("查询失败",CType(vbOKOnly + MsgBoxStyle.Exclamation,MsgBoxStyle),"警告")
Finally
Call CloseConn(conn) '关闭连接
Call CloseCmd(cmd) '关闭连接
End Try
Return dt
End Function</span>
sqlhelper类写完了,我们看下在实际操作中该怎么应用!
<span style="font-family:KaiTi_GB2312;font-size:18px;"> Private ReadOnly sqlHelper As New SQLHelper
'定义一个selectUser方法,用于实现对数据库的查询,读取数据库中的信息!
Public Function selectUser(ByVal Dlogin As Login) As DataTable
'实例化datatable,这个是返回值的类型,返回值可以是表,也可以是实体
Dim table As New DataTable
'定义查询语句
Dim sqlstring As String = "select * from Login where UserName=@UserName and PassWord=@PassWord"
'定义实体
Dim sqlParams As SqlParameter() = {New SqlParameter("@UserName",Dlogin.name),New SqlParameter("@PassWord",Dlogin.psword)}
<span style="color:#ff0000;"><strong> table = sqlHelper.ExecSelect(sqlstring,CommandType.Text,sqlParams)</strong></span>
'返回值
Return table
End Function</span>
这里面有四种类型,分别为有参数增删改,无参数增删改,有参数查询,无参数查询!
注意书写代码的时候对这几种类型的选择!
到这一个完整的sqlhelper类就完成了,初学者,如果有什么不当之处,请大家批评指点! (编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|