您的位置:首页 > 博客中心 > 数据库 >

D层瘦身之SqlHelper

时间:2022-03-13 22:39

    今天我也唠唠这三层架构中SqlHelper的事,在做机房收费的初期并没有用这个类,于是乎在n多个连接数据库的时候我的做法如下(以查询登录用户为例):

Imports System.Data
Imports System.Data.SqlClient
Imports Entity.entity
Public Class D_UserDAO
    '查询登录用户是否存在
    Public Function SelectUser(ByVal User As E_UserInfo) As E_UserInfo
        Dim conn As New SqlConnection       '创建连接对象
        Dim cmd As New SqlCommand           '创建命令对象

        conn = New SqlConnection(ConnStr.Connectstring())       '创建数据库连接
        cmd.Connection = conn

        '查询数据库
        cmd.CommandText = "Select * From UserInfo Where UserName=@UserName And Password=@Password"      '数据库连接字符串
        cmd.Parameters.Add(New SqlParameter("@UserName", User.UserName))                                '数据库连接参数
        cmd.Parameters.Add(New SqlParameter("@Password", User.Password))
        cmd.CommandType = CommandType.Text                  '获取SQL语句的具体类型,在这里为Select
        conn.Open()

        Dim reader As SqlDataReader = cmd.ExecuteReader     '执行查询语句,并生成一个DataReader
        Dim nuser As New E_UserInfo                         '实例化新的UserInfo,用于保存返回的实体

        '获取查询到的数据,并返回给相应的属性
        While reader.Read()
            '判断用户信息是否为空
            If nuser Is Nothing Then
                nuser = New E_UserInfo
            End If
            nuser.UserID = reader.GetInt32(0)
            nuser.UserName = reader.GetString(1)
            nuser.Password = reader.GetString(2)
            nuser.Level = reader.GetString(3)
        End While

        Return nuser            '返回得到的实体
        conn.Close()            '关闭数据库连接
    End Function
End Class

Imports System.Data Imports System.Data.SqlClient Imports Entity.entity Public Class D_UserDAO '查询登录用户是否存在 Public Function SelectUser(ByVal User As E_UserInfo) As DataTable Dim mySqlHelper As New SqlHelper '创建数据库连接对象 Dim cmdText As String = "Select * From UserInfo Where UserName=@UserID And Password=@Password" '创建连接字符串 Dim paras As SqlParameter() = {New SqlParameter("@UserID", User.UserID), New SqlParameter("@Password", User.Password)} '添加参数 Dim dt As New DataTable '定义一个DataTable来接收数据库查询的结果 dt = mySqlHelper.ExecSelect(cmdText, CommandType.Text, paras) '执行数据库查询操作 Return dt '返回查询结果 End Function End Class

Imports System.Data Imports System.Data.SqlClient Imports System.Configuration '需要在管理器中添加相应的引用 '按照返回值的类型将对数据库的增删改查分为两类:"增删改"只需返回查询是否成功,而"查"需要返回查询到的信息。 '这两类每种还可分为有无参数的,所以在SqlHelper类中共有四个过程,分别表示对数据库的四类操作 Public Class SqlHelper '获得配置文件中的数据库连接字符串 Private ReadOnly strConnection As String = ConfigurationManager.AppSettings("ConnStr") Dim conn As SqlConnection = New SqlConnection(strConnection) '定义连接,并初始化SqlHelper类 Dim cmd As New SqlCommand '定义cmd命令 Dim adp As New SqlDataAdapter '定义一个数据库适配器 Dim ds As New DataSet '定义一个数据集 Dim dt As New DataTable '定义一个数据表 '关闭数据库连接 Private Sub CloseConn() '判断数据库是否为关闭,在未关闭的情况下关闭数据库连接 If conn.State <> ConnectionState.Closed Then conn.Close() conn = Nothing '不指向原来的对象 End If End Sub '关闭数据库命令 Private Sub CloseCmd() '判断cmd命令是否存在,若存在则销毁 If Not IsNothing(cmd) Then cmd.Dispose() cmd = Nothing End If End Sub '第一类,有参数的增删改操作,返回Boolean类型,True为成功,False为失败 Public Function ExecAddDelUpdate(ByVal cmdText As String, ByVal cmdType As CommandType, ByVal sqlParas As SqlParameter()) As Boolean '用传入的参数填充SqlHelper类的cmd对象 cmd.Parameters.AddRange(sqlParas) '传入参数 cmd.CommandText = cmdText '设置查询的语句 cmd.CommandType = cmdType '设置一个值,解释cmdText cmd.Connection = conn '定义连接 Try conn.Open() '打开数据库连接 Return cmd.ExecuteNonQuery '执行增删改操作 cmd.Parameters.Clear() '清除传入的参数 Catch ex As Exception Return False Finally Call CloseConn() '关闭连接 Call CloseCmd() '关闭命令 End Try End Function '第二种,无参数的增删改操作,返回Boolean类型,True为成功,False为失败 Public Function ExecAddDelUpdate(ByVal cmdText As String, ByVal cmdType As CommandType) As Boolean '用传入的参数填充SqlHelper类的cmd对象 cmd.CommandText = cmdText '设置查询语句 cmd.CommandType = cmdType '设置一个值,解释cmdText cmd.Connection = conn '定义连接 Try conn.Open() '打开数据库连接 Return cmd.ExecuteNonQuery '执行增删改操作 cmd.Parameters.Clear() '清除传入的参数 Catch ex As Exception Return False Finally Call CloseConn() '关闭连接 Call CloseCmd() '关闭命令 End Try End Function '第三种,有参数的查询操作,返回DataTable Public Function ExecSelect(ByVal cmdText As String, ByVal cmdType As CommandType, ByVal sqlParas As SqlParameter()) As DataTable '用传入的参数填充SqlHelper类的cmd对象 cmd.Parameters.AddRange(sqlParas) '传入参数 cmd.CommandText = cmdText '设置查询的语句 cmd.CommandType = cmdType '设置一个值,解释cmdText cmd.Connection = conn '定义连接 adp = New SqlDataAdapter(cmd) '实例化dap Try adp.Fill(ds) '用Adapter填充DataSet dt = ds.Tables(0) 'DataTable是DataSet的第一个表 'cmd.Parameters.Clear() '清除参数 Catch ex As Exception MsgBox("查询失败", CType(vbOKOnly + MsgBoxStyle.Exclamation, MsgBoxStyle), "警告") Finally Call CloseConn() '关闭数据库连接 Call CloseCmd() '关闭命令 End Try Return dt '返回查询到的表 End Function '第四种,无参数的查询操作,返回DataTable Public Function ExecSelect(ByVal cmdText As String, ByVal cmdType As CommandType) As DataTable '用传入的参数填充SqlHelper类的cmd对象 cmd.CommandText = cmdText '设置查询的语句 cmd.CommandType = cmdType '设置一个值,解释cmdText cmd.Connection = conn '定义连接 adp = New SqlDataAdapter(cmd) '实例化dap Try adp.Fill(ds) '用Adapter填充DataSet dt = ds.Tables(0) 'DataTable是DataSet的第一个表 Catch ex As Exception MsgBox("查询失败", CType(vbOKOnly + MsgBoxStyle.Exclamation, MsgBoxStyle), "警告") Finally Call CloseConn() '关闭数据库连接 Call CloseCmd() '关闭命令 End Try Return dt '返回查询到的表 End Function End Class

小结:

       SqlHelper类的精华在于思想,即通过封装抽离相同的内容,再通过重载使用从而达到代码的复用,从整体的应用来看也是三层架构“高内聚、低耦合”思想的体现。所以不管学习还是生活,都不要以体力为代价来换取脑力,不然结果只能是夙兴夜寐且碌碌为无。

 

ps:SqlHelper类属于数据库操作类,又感觉它内容很精简个人觉得放D层最合适不过了。

D层瘦身之SqlHelper,布布扣,bubuko.com

热门排行

今日推荐

热门手游