面向对象的应用实践—SQLHelper类的分析总结

来源:互联网 发布:gta5女性捏脸数据亚洲 编辑:程序博客网 时间:2024/05/02 20:43

    在机房收费系统中,D层链接数据库的代码是非常常用的,刚开始的时候按照以前敲代码的惯性,用链接字符串的方式,在每一个功能实现的时候都把链接数据库的代码写了一遍,这样在机房功能实现的时候我终于写代码写恶心自己了。那么就必须要把自己从这种毫无意义的重复性工作中解脱出来了,学过面向对象的抽象以后还没怎么使用过,所以这次的SQLHepler类的编写也是对自己的一种检验。用下面的小图来总结:


    首先要明白SQLHelper类在整个系统中的作用是干什么的。上面说了要把程序员从书写重复性的链接字符串过程操作数据库的泥潭中拯救出来,那么也就明确了SQLHelper类的作用就是代替每一个功能中链接数据库的过程的代码的,把那些代码给抽象出来封装,然后给其他的功能复用,达到代码简化的目的。

      然后就要理清机房收费系统操作数据库的不同操作了。对数据库的操作以前也学习过,增删改查四字暨语是最主要的,其次就是它们的各种混合多重使用,在这写操作中注意到,查这个操作有的时候是需要把数据返回给调用者的,而增删改操作只需要执行下去,有的时候需要有布尔值的返回。那么就可以此分类增删改查操作,方便SQLHelper类中的函数调用。

     接着就要考虑如何来编写函数了,函数也是分不同情况的,有的有参数有的没参数,那么对应到要实现的对数据库的操作的时候也要考虑到,这样下来我们封装的一些函数就可以被大部分的功能调用而不会出错。

    下面是SQLHelper类里面的代码:

'/**********************************'类名称:SQLHelper'命名空间:DAL'创建时间:2015/5/10 9:42:32'作者:王泽'小组:'修改时间:'修改人:'版本号:v1.0.0'***********************************/Imports System.DataImports System.Data.SqlClientImports System.Configuration''' <summary>''' SQLHelper类提供广大用户用于高性能练习sql数据库。''' </summary>''' <remarks></remarks>Public Class SQLHelper    '设置全局公用变量 strConnection 连接数据库    Private ReadOnly strConnection As String = ConfigurationManager.AppSettings("strConnection")    Dim connection As SqlConnection = New SqlConnection(strConnection)   '定义新的连接方法连接数据库    Dim command As New SqlCommand    '定义新的数据库命令    ''' <summary>    ''' 执行增删改操作,(有参)返回值为boolean类型,确认执行是否成功    ''' </summary>    ''' <param name="cmdText"></param>    ''' <param name="cmdType"></param>    ''' <param name="paras"></param>    ''' <returns></returns>    ''' <remarks></remarks>    Public Function ExecAddDelUpdate(ByVal cmdText As String, ByVal cmdType As CommandType, ByVal paras As SqlParameter()) As Boolean        '将传入的值分别设置为command的属性值        command.Parameters.AddRange(paras)   '将参数传入        command.CommandText = cmdText   '设置执行命令句        command.CommandType = cmdType    '设置命令语句类型        command.Connection = connection   '设置命令语句的连接全局变量        Try            connection.Open()   '打开连接            command.ExecuteNonQuery()   '执行命令语句            command.Parameters.Clear()   '清除参数值            Return True        Catch ex As Exception            Return False        Finally            Call CloseCommand(command)   '关闭command命令类            Call CloseConnection(connection)   '关闭connection连接类        End Try    End Function    ''' <summary>    ''' 设置增删改方法,(无参)并返回执行结果    ''' </summary>    ''' <param name="cmdText"></param>    ''' <param name="cmdType"></param>    ''' <returns></returns>    ''' <remarks></remarks>    Public Function ExecAddDelUpdateNo(ByVal cmdText As String, ByVal cmdType As CommandType) As Boolean        '将传入的值设置为command的属性值        command.CommandText = cmdText   '设置命令语句        command.CommandType = cmdType   '设置命令类型        command.Connection = connection   '设置连接数据库        Try            connection.Open()  '打开连接            command.ExecuteNonQuery()   '执行命令语句            Return True        Catch ex As Exception            Return False        Finally            Call CloseCommand(command)            Call CloseConnection(connection)        End Try    End Function    ''' <summary>    ''' 执行查询的操作,(有参)返回一个datatable类型的表    ''' </summary>    ''' <param name="cmdText"></param>    ''' <param name="cmdType"></param>    ''' <param name="paras"></param>    ''' <returns></returns>    ''' <remarks></remarks>    Public Function ExecSelect(ByVal cmdText As String, ByVal cmdType As CommandType, ByVal paras As SqlParameter()) As DataTable        '设置数据传输的中间过程        Dim dt As New DataTable        Dim ds As New DataSet        Dim sqlAdapter As SqlDataAdapter = New SqlDataAdapter(command)        '设置传入的数据为command的属性值        command.Parameters.AddRange(paras)   '将传入的参数传入command的属性        command.CommandType = cmdType   '设置传入的cmdtype为执行语句的命令类型        command.CommandText = cmdText   '设置传入的cmdtext为执行语句的命令        command.Connection = connection   '设置连接        Try            connection.Open()            sqlAdapter.Fill(ds)            dt = ds.Tables(0)            command.Parameters.Clear()            Return dt        Catch ex As Exception            Return Nothing        Finally            Call CloseCommand(command)            Call CloseConnection(connection)        End Try    End Function    ''' <summary>    ''' 执行查询的操作,(无参)返回一个datatable类型的表    ''' </summary>    ''' <param name="cmdText"></param>    ''' <param name="cmdType"></param>    ''' <returns></returns>    ''' <remarks></remarks>    Public Function ExecSelectNo(ByVal cmdText As String, ByVal cmdType As CommandType) As DataTable        '设置数据传输的中间过程        Dim dt As New DataTable        Dim ds As New DataSet        Dim sqlAdapter As SqlDataAdapter = New SqlDataAdapter(command)        '设置传入的数据为command的属性值        command.CommandType = cmdType   '设置传入的cmdtype为执行语句的命令类型        command.CommandText = cmdText   '设置传入的cmdtext为执行语句的命令        command.Connection = connection   '设置连接        Try            connection.Open()            sqlAdapter.Fill(ds)            dt = ds.Tables(0)            Return dt        Catch ex As Exception            Return Nothing        Finally            Call CloseCommand(command)            Call CloseConnection(connection)        End Try    End Function    ''' <summary>    ''' 关闭connection的连接    ''' </summary>    ''' <param name="connection"></param>    ''' <remarks></remarks>    Public Sub CloseConnection(ByVal connection As SqlConnection)        If (connection.State <> ConnectionState.Closed) Then            connection.Close()    '关闭连接            connection = Nothing   '不指向原对象        End If    End Sub    ''' <summary>    ''' 关闭command的命令    ''' </summary>    ''' <param name="command"></param>    ''' <remarks></remarks>    Public Sub CloseCommand(ByVal command As SqlCommand)        If Not IsNothing(command) Then            command.Dispose()   '销毁command命令            command = Nothing        End If    End SubEnd Class

    俗话说鸡蛋不能放在一个篮子里面,通过上面的代码可以看出,在SQLHelper类里面,链接数据库的字符串也不是直接就写在了类里面,而是通过配置文件,把链接字符串在配置文件里写了,这样做的好处就是面相对象的另一个特点:多态。当我们需要更换数据库的时候,不需要在打开系统的SQLHelper类修改了,直接在配置文件里面修改链接字符串就可以省时省力的更换SQLHelper类访问的数据库。

    面向对象到现在为止也是只认识到了皮毛,在系统中用了一点就感觉对机房收费系统非常的有帮助,那么那些在面向对象上侵淫技术十几年的老技术员,他们的眼中恐怕面向对象不光是在代码中体现了,生活处处是对象。心怀敬畏!

0 0