SqlHelper的使用---重构机房收费系统

刚刚开始时一直纠结这个Sqlhelper,听起来感觉有点了不起。真正用起来才知道它不过就是对D层中相同代码的封装。由于我是先用纯三层敲了一遍机房,敲第二遍的时候加设计模式和Sqlhelper,感觉真是水到渠成。将变化的地方作成参数,传入到SqlHelper的函数中。当然这个过程中,需要分析我们写在D层中函数的特点。所幸已经有人帮我们总结了出来。我们学会站在巨人的肩膀上。

在 SqlHelper 类中实现的方法包括:
ExecuteNonQuery。此方法用于执行不返回任何行或值的命令。这些命令通常用于执行数据库更新,但也可用于返回存储过程的输出参数。
ExecuteReader。此方法用于返回SqlDataReader对象,该对象包含由某一命令返回的SqlDataReader。
ExecuteDataset。此方法返回DataSet对象,该对象包含由某一命令返回的DataSet。(这里我使用较多的是Datatable,想到DataSet是由多个DataTable构成的这里就省下没写。)
ExecuteScalar。此方法返回一个值。该值始终是该命令返回的第一行的第一列。(不常用)
ExecuteXmlReader。此方法返回 FOR XML 查询的 XML 片段。(还未使用过)
当然这些都是宏观上的,真得要用,还需要看看实例。我以机房中的一个方法为例。
SqlHelper中的代码:
'/************************************************* 
'类名称:SqlHelper
'命名空间:Helper
'作者:王雅瑾
'小组:  
'说明:
'创建日期:2013/11/16 17:13:13
'版本号:v2.0.0
'**********************************************/
Imports System.Data
Imports System.Data.SqlClient
Public Class SqlHelper
    Private ReadOnly strConnection As String = Configuration.ConfigurationManager.ConnectionStrings("ChargeSystemConnectionString").ToString '调用配置文件
                
    ''' <summary>
    ''' ExecuteNonQuery操作,对数据库进行增删改操作(1)无参数
    ''' </summary>
    ''' <param name="cmdText">需要执行的Sql语句</param>
    ''' <param name="cmdType">给出Sql语句的类型</param>
    ''' <returns>integer,受影响的行数</returns>
    ''' <remarks></remarks>
    Public Function ExecuteNonQuery(ByVal cmdText As String, ByVal cmdType As CommandType) As Integer
        Using conn As New SqlConnection(strConnection)             '使用连接池,可以在使用完成后自动关闭连接.
            Dim cmd As SqlCommand = conn.CreateCommand()
            cmd.CommandText = cmdText
            cmd.CommandType = cmdType
            Try
                conn.Open()
                Return cmd.ExecuteNonQuery()
            Catch ex As Exception
                Return 0
                Throw ex
            End Try
        End Using
    End Function
    ''' <summary>
    ''' ExecuteNonQuery操作,对数据库进行增删改操作(2)有参数
    ''' </summary>
    ''' <param name="cmdText">需要执行的Sql语句</param>
    ''' <param name="cmdType">给出Sql语句的类型</param>
    ''' <param name="sqlParams">参数数组,参数个数根据实际情况而定</param>
    ''' <returns>integer,受影响的行数</returns>
    ''' <remarks></remarks>
    Public Function ExecuteNonQuery(ByVal cmdText As String, ByVal cmdType As CommandType, ByVal sqlParams As SqlParameter()) As Integer
        Using conn As New SqlConnection(strConnection)
            Dim cmd As SqlCommand = conn.CreateCommand()
            cmd.CommandText = cmdText
            cmd.CommandType = cmdType
            cmd.Parameters.AddRange(sqlParams)
            Try
                conn.Open()
                Return cmd.ExecuteNonQuery()
            Catch ex As Exception
                Return 0
                Throw ex
            End Try
        End Using
    End Function
    ''' <summary>
    ''' 执行查询操作(1)无参数
    ''' </summary>
    ''' <param name="cmdText">需要查询的Sql语句</param>
    ''' <param name="cmdType">给出Sql语句的类型</param>
    ''' <returns>dataTable,查询到的表格</returns>
    ''' <remarks></remarks>
    Public Function ExecuteDataTable(ByVal cmdText As String, ByVal cmdType As CommandType) As DataTable
        Using conn As New SqlConnection(strConnection)
            Dim cmd As SqlCommand = conn.CreateCommand()
            Dim adp As SqlDataAdapter
            Dim ds As New DataSet
            cmd.CommandText = cmdText
            cmd.CommandType = cmdType
            adp = New SqlDataAdapter(cmd)
            Try
                conn.Open()
                adp.Fill(ds)
                Return ds.Tables(0)
            Catch ex As Exception
                Return Nothing
                Throw ex
            End Try
        End Using
    End Function
    ''' <summary>
    ''' 执行查询操作(2)有参数
    ''' </summary>
    ''' <param name="cmdText">需要执行的Sql语句</param>
    ''' <param name="cmdType">给出Sql语句的类型</param>
    ''' <param name="sqlParams">参数数组,参数个数根据实际情况而定</param>
    ''' <returns>dataTable,查询出的表格</returns>
    ''' <remarks></remarks>
    Public Function ExecuteDataTable(ByVal cmdText As String, ByVal cmdType As CommandType, ByVal sqlParams As SqlParameter()) As DataTable
        Using conn As New SqlConnection(strConnection)
            Dim cmd As SqlCommand = conn.CreateCommand()
            Dim adp As SqlDataAdapter
            Dim ds As New DataSet
            cmd.CommandText = cmdText
            cmd.CommandType = cmdType
            cmd.Parameters.AddRange(sqlParams)
            adp = New SqlDataAdapter(cmd)
            Try
                conn.Open()
                adp.Fill(ds)
                Return ds.Tables(0)
            Catch ex As Exception
                Return Nothing
                Throw ex
            End Try
        End Using
    End Function
End Class

以登录时要查询用户是否存在为例,调用一下SqlHelper.
''' <summary>
    ''' 登录时查询用户是否存在.          
    ''' </summary>
    ''' <param name="enUser">参数为用户实体</param>
    ''' <returns>datatable ,将userPassword,level,作为表中的两列返回</returns>
    ''' <remarks></remarks>
    Public Function SelectUser(enUser As Entity.UsersEntity) As DataTable Implements IDAL.IUser.SelectUser     '对应于Sqlhelper中方法4
        Dim helper As New Helper.SqlHelper
        Dim dt As New DataTable
        Dim cmdText As String = "select userPassword,level from [T-Users] where userId=@userId and isOn='是'"
        Dim sqlParams As SqlParameter() = {New SqlParameter("@userId", enUser.UserId)}
        dt = helper.ExecuteDataTable(cmdText, CommandType.Text, sqlParams)
        Return dt
    End Function

我的SqlHelper中只针对了两种方法来写,每种都又有有参和无参两种。其实ExecuteReader、ExecuteDataset、ExecuteScalar、ExecuteXmlReader应该也还有两种情况.当然根据自己D层中的需要来写.相信SqlHelper还有其他的秘密,需要进一步地理解,应用。学习仍在路上。


评论 31
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值