D层重构一《Sqlhelper》

来源:互联网 发布:网络交友新时空ppt 编辑:程序博客网 时间:2024/06/06 23:59
前提:
在上篇博客《三层之D层数据库操作》我们已经发现了D层中出现的问题:重复
对于重复的出现,我们现在的方法一是抽象出父类,提出公共的东西。二是创建函数过程,传入参数调用过程。

SqlHelper类:
       百科介绍;SqlHelper是一个基于.NET Framework的数据库操作组件。组件中包含数据库操作方法,SqlHelper 类用于通过一组静态方法来封装数据访问功能。该类不能被继承或实例化,因此将其声明为包含专用构造函数的不可继承类。在 SqlHelper 类中实现的每种方法都提供了一组一致的重载。这提供了一种很好的使用 SqlHelper 类来执行命令的模式,同时为开发人员选择访问数据的方式提供了必要的灵活性。每种方法的重载都支持不同的方法参数,因此开发人员可以确定传递连接、事务和参数信息的方式。


D层应用

     1、用于简化D层重复写的数据库连接SqlConnection,SqlCommand,SqlDataReader等。对这些进行了封装。使用时只需要调用Sqlhelper中的方法,传入一些参数如数据库连接字符串,Sql语句等,访问数据库

     2.划分方法
      上面的博客中我们已经发现增删改方法的形式相同,不同的只是对应的sql语句和参数,当他们执行完之后可以弹出个MSGbox显示操作成功,也可以返回一个Boolean给B层,根据布尔值的真假显示操作成功与否。
      查询因为要从数据库中读取数据单独的作为一个方法。
  整体上是这两个方法,在加上各自的方法是否有传入参数所以总体上共4方法。

   3.代码实现

Imports System.Data  '相关引用Imports System.Data.SqlClientImports System.ConfigurationPublic Class SqlHelper       '建立数据库链接    Private ReadOnly conn As String = ConfigurationManager.AppSettings("sqlconnect")    Dim cn As SqlConnection = New SqlConnection(conn)    Dim cmd As SqlCommand = New SqlCommand()      '在调用sqlhelper之前关闭已经打开的链接和清空sqlcommand    Private Sub CloseCn()        If cn.State <> ConnectionState.Closed Then            cn.Close()            cn = Nothing        End If    End Sub    Private Sub CloseCmd()        If Not IsNothing(cmd) Then            cmd.Dispose()            cmd = Nothing        End If    End Sub    '有参数的增删改,返回boolean    Public Function ExecuteAddDelUpdate(ByVal cmdText As String, ByVal cmdType As CommandType, ByVal sqlParas As SqlParameter()) As Boolean        cmd.Parameters.AddRange(sqlParas)        cmd.CommandText = cmdText        cmd.CommandType = cmdType        cmd.Connection = cn        Try            cn.Open()            Return cmd.ExecuteNonQuery()            cmd.Parameters.Clear()        Catch ex As Exception            Return False        Finally            Call CloseCn()            Call CloseCmd()        End Try    End Function    '无参数的增删改查    Public Function ExecuteAddDelUpdate(ByVal cmdText As String, ByVal cmdType As CommandType) As Boolean        cmd.CommandText = cmdText        cmd.CommandType = cmdType        cmd.Connection = cn        Try            cn.Open()            Return cmd.ExecuteNonQuery()            cmd.Parameters.Clear()        Catch ex As Exception            Return False        Finally            Call CloseCn()            Call CloseCmd()        End Try    End Function    '有参数的查询返回Datatable    Public Function ExecuteSelect(ByVal cmdText As String, ByVal cmdType As CommandType, ByVal sqlParas As SqlParameter()) As DataTable        Dim adp As New SqlDataAdapter        Dim ds As New DataSet        Dim dt As New DataTable        cmd.CommandText = cmdText        cmd.Parameters.AddRange(sqlParas)        cmd.CommandType = cmdType        cmd.Connection = cn        adp = New SqlDataAdapter(cmd)        Try            adp.Fill(ds)            dt = ds.Tables(0)            cmd.Parameters.Clear()        Catch ex As Exception            MsgBox("查询失败", CType(vbOKOnly + MsgBoxStyle.Exclamation, MsgBoxStyle), "警告!")        Finally            Call CloseCn()            Call CloseCmd()        End Try        Return dt    End Function    '无参数的查询操作,返回datatale    Public Function ExecuteSelect(ByVal cmdText As String, ByVal cmdType As CommandType) As DataTable        Dim adp As New SqlDataAdapter        Dim ds As New DataSet        Dim dt As New DataTable        cmd.CommandText = cmdText        cmd.CommandType = cmdType        cmd.Connection = cn        adp = New SqlDataAdapter(cmd)        Try            adp.Fill(ds)            dt = ds.Tables(0)        Catch ex As Exception            MsgBox("查询失败", CType(vbOKOnly + MsgBoxStyle.Exclamation, MsgBoxStyle), "警告!")        Finally            Call CloseCn()            Call CloseCmd()        End Try        Return dt    End FunctionEnd Class

总结: 现在的代码不仅仅是满足现有的需要为了实现而实现,要考虑的是如何让代码更简练,更容易维护和复用,即使我们不知道有sqlhelper这个组件,也可以写出相应的类,来简化D层对数据库的操作。                                                                                           
0 0