在接触SqlHelper之前已经是久闻大名了。机房的重构师傅说先用三层的思想来做,等体会深了在加设计模式和其他的。前天搬着电脑让师傅看了看,指导了指导,然后说可以加一些东西了。我说加这个加那个?师傅说想加什么想用什么回去自己再学学具体的会体会深刻。
其实在写纯三层的时候已经感受到了D层中代码的大量重复。连接数据库查询数据库写SQL语句总是用到那么几句话。
机房收费中关于数据库的操作无非这四种情况:
1.不带参数的增删改操作,返回结果为值
2.带参数的增删改操作,返回结果为值
3.不带参数的查询操作,以表为返回结果
4.带参数的查询操作,以表为返回结果
SqlHelper可以将这些方法进行封装,然后使用的时候只需调用。有参数的传参。
Imports System.Data Imports System.Data.SqlClient Imports System.Configuration Public Class SqlHelper Private Shared ConnectionString As String = ConfigurationManager.AppSettings("strConn") ''' <summary> ''' 执行不带参数的增删改操作 ''' </summary> ''' <param name="cmdTxt">参数cmdTxt为所要执行的sql语句</param> ''' <param name="cmdType">SqlCommand的执行类型</param> ''' <returns>整形返回值res,执行成功则res!=0,不成功则res=0</returns> ''' <remarks></remarks> Public Shared Function ExecuteNoQuery(ByVal cmdTxt As String, ByVal cmdType As CommandType) As Integer Dim conn As SqlConnection = New SqlConnection(ConnectionString) '定义连接变量conn,连接数据库 Dim cmd As SqlCommand '定义执行命令变量 Dim res As Integer '定义返回值变量res cmd = New SqlCommand(cmdTxt, conn) '实例化conn上的SqlCommand命令,执行语句为cmdTxt cmd.CommandType = cmdType '命令执行的类型 Try '如果数据库连接状态为关闭则将其打开 If conn.State = ConnectionState.Closed Then conn.Open() End If '执行cmdTxt语句,并将执行结果返回给res(执行成功返回的记录总数) res = cmd.ExecuteNonQuery() Catch ex As Exception '错误处理程序,出错则提示 MsgBox(ex.Message, , "数据库操作") Finally '如果连接状态为打开则将其关闭,释放内存 If conn.State = ConnectionState.Open Then conn.Close() End If End Try Return res 'res作为结果返回 End Function ''' <summary> ''' 执行带参数的增删改操作 ''' </summary> ''' <param name="cmdTxt">参数cmdTxt为所要执行的sql语句</param> ''' <param name="cmdType">SqlCommand的执行类型</param> ''' <param name="paras">sql语句中引用的参数</param> ''' <returns></returns> ''' <remarks></remarks> Public Shared Function ExecuteNoQuery(ByVal cmdTxt As String, ByVal cmdType As CommandType, ByVal paras As SqlParameter()) As Integer Dim conn As SqlConnection = New SqlConnection(ConnectionString) '定义连接变量conn,连接数据库 Dim cmd As SqlCommand '定义执行命令变量 Dim res As Integer '定义返回值变量res cmd = New SqlCommand(cmdTxt, conn) '实例化conn上的SqlCommand命令,执行语句为cmdTxt cmd.CommandType = cmdType '命令执行的类型 cmd.Parameters.AddRange(paras) '执行cmdTxt语句时所带的参数 Try '如果数据库连接状态为关闭则将其打开 If conn.State = ConnectionState.Closed Then conn.Open() End If '执行cmdTxt语句,并将执行结果返回res(执行成功返回的记录总数) res = cmd.ExecuteNonQuery() Catch ex As Exception '错误处理程序,出错则提示 MsgBox(ex.Message, , "数据库操作") Finally '如果连接状态为打开则将其关闭,释放内存 If conn.State = ConnectionState.Open Then conn.Close() End If End Try Return res 'res作为返回值返回 End Function ''' <summary> ''' 执行不带参数的查询操作 ''' </summary> ''' <param name="cmdTxt">cmdTxt作为查询时的sql语句</param> ''' <param name="cmdType">查询时的查询方式</param> ''' <returns>查询后以表的方式返回</returns> ''' <remarks></remarks> Public Shared Function GetDataTable(ByVal cmdTxt As String, ByVal cmdType As CommandType) As DataTable Dim conn As SqlConnection = New SqlConnection(ConnectionString) '连接数据库 Dim cmd As New SqlCommand '实例化命令查询变量 Dim adataset As DataSet '定义数据缓存变量 Dim adaptor As SqlDataAdapter '定义数据适配器变量 cmd = New SqlCommand(cmdTxt, conn) '在conn上面实例化命令变量cmd,执行语句cmdTxt adaptor = New SqlDataAdapter(cmd) '将结果绑定到数据适配器变量adaptor上面 adataset = New DataSet '实例化数据缓存变量adataset cmd.CommandType = cmdType '选择命令执行的类型 Try '如果数据库连接状态为关闭则将其打开 If conn.State = ConnectionState.Closed Then conn.Open() End If '向adaptor对象中填充查询的数据 adaptor.Fill(adataset) Catch ex As Exception '出错则提示 MsgBox(ex.Message, , "数据库操作") Finally '如果连接状态为打开则将其关闭,释放内存 If conn.State = ConnectionState.Open Then conn.Close() End If End Try '以表的形式返回结果 Return adataset.Tables(0) End Function ''' <summary> ''' 执行带参数的查询操作 ''' </summary> ''' <param name="cmdTxt">参数cmdTxt为所要执行的sql语句</param> ''' <param name="cmdType">查询时的查询方式</param> ''' <param name="paras">查询时的命令参数paras</param> ''' <returns>查询后以表的方式返回</returns> ''' <remarks></remarks> Public Shared Function GetDataTable(ByVal cmdTxt As String, ByVal cmdType As CommandType, ByVal paras As SqlParameter()) As DataTable Dim conn As SqlConnection = New SqlConnection(ConnectionString) '连接数据库 Dim cmd As SqlCommand '定义命令变量cmd Dim adaptor As SqlDataAdapter '定义数据适配器变量 Dim adataset As DataSet '定义数据缓存变量 cmd = New SqlCommand(cmdTxt, conn) '在conn上面执行实例化命令变量,并执行语句cmdType cmd.CommandType = cmdType '命令执行的类型 cmd.Parameters.AddRange(paras) '命令执行时的参数 adaptor = New SqlDataAdapter(cmd) '将结果绑定到数据适配器变量adaptor上面 adataset = New DataSet Try '如果数据连接状态为关闭则打开 If conn.State = ConnectionState.Closed Then conn.Open() End If adaptor.Fill(adataset) '向adaptor对象中填充查询的数据 Catch ex As Exception '出错提示 MsgBox(ex.Message, , "数据库操作") Finally '如果连接状态为打开则关闭,释放内存 If conn.State = ConnectionState.Open Then conn.Close() End If End Try '以表格形式返回结果 Return adataset.Tables(0) End Function End Class
SqlHelper这个helper确实帮我们解决了不少问题,减少了代码的重复编写。终于深刻体会了师傅的良苦用心。在机房中有很多值得我们去学习使用实践我们之前的理论知识。