重构之SqlHelper类

来源:互联网 发布:信阳师范网络教学平台 编辑:程序博客网 时间:2024/05/17 22:47

前言

在网上看大家的博客,发现好多人在用SqlHelper类,怀着人云亦云的态度,我也就稀里糊涂的用了。好多人都说,使用SqlHelper类是为了减少使用重复的代码,我想了想也是,要是你写100个功能那你还在D层写100个增删改查的方法嘛,于是为了方便就使用SqlHelper类了。我在没有经过自己的思考就站在巨人的肩膀上,这样虽然没有走过多少弯路,但是得到的也就会相应的少了。

过程

刚开始的时候以为SqlHelper类中的代码都是一样的,都跟登录时用到的一样,但是敲修改密码窗体的时候,出了Bug,返回的表为空,于是乎就是问了明慧,明慧一句话点醒了我,SqlHelper类有4种,分为有无参数的增删改和有无参数的查询。第一次机房的时候就没有很理解增删改查,欠下的终究是要还的,这次想好好理解理解,和晓静师傅谈论过一番之后,觉得也明白了点东西。首先区分带参数和不带参数的区别。带参数就是查询一个表或数据时需要一个字段或实体的指引,假如你想查张三的成绩,这时候你得通过张三这个姓名找他的成绩,这时候就是带参数的查询,反之就是不带参数的查询。带参数和不带参数的增删改查亦是如此。

SqlHelper类的代码还是比较好理解的。

Imports System.DataImports System.ConfigurationImports System.Data.SqlClientPublic Class SqlHelper    '定义变量,获得数据库连接字符串    Dim str As String = System.Configuration.ConfigurationSettings.AppSettings("db")    '设置连接    Dim conn As SqlConnection = New SqlConnection(str)    '定义command命令    Dim cmd As New SqlCommand    '执行查询操作(有参),参数不限    Public Function ExecSelect(ByVal cmdText As String, cmdType As CommandType, ByVal paras As SqlParameter()) As DataTable        Dim adp As New SqlDataAdapter       '是DataSet和SQL server之间的桥接器,用于检索和保存数据        Dim dt As New DataTable        Dim ds As New DataSet        '将传入的值,分别为cmd的属性赋值        cmd.CommandText = cmdText           '设置查询语句        cmd.CommandType = cmdType           '设置cmd对象的类型        cmd.Connection = conn                '数据库连接语句        cmd.Parameters.AddRange(paras)       '传入参数        adp = New SqlDataAdapter(cmd)        '实例化适配器        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 CloseCmd(cmd)                '释放cmd        End Try        Return dt                             '返回查询到的数据    End Function
 '执行查询操作,无参    Public Function ExecSelectNo(ByVal cmdText As String, ByVal cmdType As CommandType) As DataTable        Dim adp As New SqlDataAdapter        'dataset和SQL server之间的桥接器        Dim ds As New DataSet        '为要执行命令的cmd赋值        cmd.CommandText = cmdText          '设置sql语句        cmd.CommandType = cmdType           '设置cmd对象的类型        cmd.Connection = conn                '数据库连接语句        adp = New SqlDataAdapter(cmd)        '实例化适配器        Try            adp.Fill(ds)                    '用adapter将dataset填充            Return ds.Tables(0)             '返回datatable的第一个表        Catch ex As Exception               '遇见错误就抛出            Return Nothing        Finally            Call CloseCmd(cmd)              '关闭cmd        End Try    End Function

 '执行增删改三个操作,有参,返回值为Boolen类型,确认是否执行成功    Public Function ExecAddDelUpdate(ByVal cmdText As String, ByVal cmdType As CommandType, ByVal paras As SqlParameter()) As Integer        '将传入的值,分别为cmd的属性赋值        cmd.Parameters.AddRange(paras)               '将参数传入        cmd.CommandType = cmdType                    '设置一个值,解释cmdtext        cmd.Connection = conn                        '设置连接,全局变量        cmd.CommandText = cmdText                    '设置sql语句        Try            conn.Open()                             '打开连接            Return cmd.ExecuteNonQuery              '执行增删改查操作        Catch ex As Exception            Throw                                   '如果出错就抛出        Finally            cmd.Parameters.Clear()                    '清除参数            Call CloseConn(conn)            Call CloseCmd(cmd)        End Try    End Function    '执行增删改三个操作,无参    Public Function ExecAddDelUpdateNo(ByVal cmdText As String, ByVal cmdType As CommandType) As Integer        '为要执行的命令cmd赋值        cmd.CommandText = cmdText                '传入查询语句        cmd.Connection = conn                     '设置连接        cmd.CommandType = cmdType                  '设置sql语句如何解释        '执行操作        Try            conn.Open()            Return cmd.ExecuteNonQuery          '执行增删改查操作        Catch ex As Exception            Return 0        Finally            Call CloseConn(conn)            Call CloseCmd(cmd)        End Try    End Function    '关闭连接    Public Sub CloseConn(ByVal conn As SqlConnection)        If (conn.State <> ConnectionState.Closed) Then        '如果没有关闭            conn.Close()                                      '关闭连接            conn = Nothing                                    '不指向原对象        End If    End Sub    '关闭命令    Public Sub CloseCmd(ByVal cmd As SqlCommand)        If Not IsNothing(cmd) Then                           '如果cmd命令还在            cmd.Dispose()                                   '释放资源            cmd = Nothing                                      '不指向原对象        End If    End SubEnd Class
小结

SqlHelper类的好处还需要慢慢去研究。


0 0