当前位置: 代码迷 >> SQL >> 数据操作的打包-sqlhelper
  详细解决方案

数据操作的打包-sqlhelper

热度:505   发布时间:2016-05-05 11:19:59.0
数据操作的封装--sqlhelper

    为了提高软件的灵活性和可维护性,软件的代码需要科学的管理,我们引入了架构这个词。设计模式提醒我们,软件中重复性的代码需要封装起来。最近在做收费系统时,需要和数据库进行频繁的联系,既然是重复的使用,就需要封装,这里使用到了sql helper

       先来看看百度对sqohelper的解释:一个基于.NETFframework的数据库操作组件。虽然不知道组件的具体含义,还是可以猜出来它就是D层中对数据库操作进行封装的工具。

        数据库的操作,不外乎四种模式,增、删、改、查,根据返回值来区分,可以分为有返回值和无返回值两大类,增、删、改操作是不需要返回值的,查询操作返回值就是查询结果。这些操作各自都有两种操作方式,有参数和无参数的,无参数的就是对整张表的操作,有参数的是对个别字段的操作。

   sql helper用到的方法或函数或参数:

   ExecuteNonQuery :此方法用于执行没有返回值的命令(有参数或者没有参数),它通常用于执行数据库(增、删、改)命令,也可用于返回存储过程的输出参数。

   Parameters:此参数用于执行有参数的查询或更新(增、删、改)操作。

   sql Command: 此函数用于封装数据库操作命令。

   CommandType:用于设置数据库连接类型

   CommandText:用于设置数据库连接语句。

看一下sql helper类代码:

Imports System.Data.SqlClientImports System.ConfigurationImports System.Data'需要在管理器中添加引用Public Class sqlHelper    '定义变量    Dim ConnString As String = "Server=.;Database=Charge;User=sa;PassWord=123456"    '获得数据库连接字符串    Private ReadOnly strConnection As String = ConfigurationSettings.AppSettings("ConnString")    Dim conn As SqlConnection = New SqlConnection(strConnection)    '定义CMD命令    Dim cmd As New SqlCommand    ''' <summary>    ''' 执行查询操作(有参数),参数没有限制    ''' </summary>    ''' <param name="cmdText">需要执行的语句,一般是SQL语句,也可能是存储过程</param>    ''' <param name="cmdType">判断SQL语句的类型,一般不是存储过程</param>    ''' <param name="sqlparameters">传入参数</param>    ''' <returns></returns>    ''' <remarks></remarks>    Public Function ParaSelect(ByVal cmdText As String, ByVal cmdType As CommandType, ByVal sqlparameters As SqlParameter()) As DataTable        '        Using conn As New SqlConnection(ConnString)  '            Dim sqlAdapter As SqlDataAdapter         '            Dim dt As New DataTable         '            Dim ds As New DataSet          '            '给CMD赋值            cmd.CommandText = cmdText            cmd.CommandType = cmdType            cmd.Connection = conn            cmd.Parameters.AddRange(sqlparameters) '添加参数            sqlAdapter = New SqlDataAdapter(cmd)   '实例化adapter            Try                sqlAdapter.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 Using    End Function    ''' <summary>    ''' 执行查询操作(无参数)    ''' </summary>    ''' <param name="cmdText">同上</param>    ''' <param name="cmdType">同上</param>    ''' <returns>dataTable查询到表格</returns>    ''' <remarks></remarks>    Public Function NonParaSelect(cmdText As String, cmdType As CommandType) As DataTable        Using conn As New SqlConnection(ConnString)            Dim sqlAdapter As SqlDataAdapter            Dim ds As New DataSet            cmd.CommandText = cmdText            cmd.CommandType = cmdType            cmd.Connection = conn            sqlAdapter = New SqlDataAdapter(cmd)            Try                sqlAdapter.Fill(ds)                Return ds.Tables(0)                '抛出异常,无返回值            Catch ex As Exception                Return Nothing            Finally                Call CloseCmd(cmd)  '关闭CMD命令            End Try        End Using    End Function    ''' <summary>    ''' 执行增、删、改操作(有参数),使用Integer作为返回值类型,0操作失败,1操作成功    ''' </summary>    ''' <param name="cmdText">需要执行的语句</param>    ''' <param name="cmdType">判断SQL语句类型</param>    ''' <param name="sqlParameter">参数数组,参数没有限制</param>    ''' <returns></returns>    ''' <remarks></remarks>    Public Function ParaDataManager(ByVal cmdText As String, ByVal cmdType As CommandType, ByVal sqlParameter As SqlParameter()) As Integer        '使用Using关键字实例化连接字符串,给cmd赋值        Using conn As New SqlConnection(ConnString)            cmd.Parameters.AddRange(sqlParameter)            cmd.CommandType = cmdType   '设置一个值,解释cmdText            cmd.Connection = conn    '设置连接,全局变量            cmd.CommandText = cmdText '设置查询语句            Try                conn.Open()    '打开连接                Return cmd.ExecuteNonQuery   '执行操作                cmd.Parameters.Clear()      '清除参数            Catch ex As Exception        '抛出异常                Return 0            Finally                Call CloseConn(conn)                Call CloseCmd(cmd)            End Try        End Using    End Function    ''' <summary>    ''' 执行增、删、改操作(无参数)    ''' </summary>    ''' <param name="cmdType">同上</param>    ''' <param name="cmdText">同上</param>    ''' <returns></returns>    ''' <remarks></remarks>    Public Function NonParaDataManager(ByVal cmdType As CommandType, ByVal cmdText As String) As Integer        '使用Using 关键字实例化连接字符串        Using conn As New SqlConnection(ConnString)            cmd.CommandText = cmdText      '设置查询语句            cmd.CommandType = cmdType      '设置SQL语句类型            cmd.Connection = conn          '设置连接            Try       '执行操作                conn.Open()                Return cmd.ExecuteNonQuery    '返回值            Catch ex As Exception                Return 0     '抛出异常,返回0表示操作失败            Finally                Call CloseCmd(cmd)                Call CloseConn(conn)            End Try        End Using    End Function    ''' <summary>    ''' 关闭连接    ''' </summary>    ''' <param name="conn">需要关闭的连接 </param>    ''' <remarks></remarks>    Public Sub CloseConn(ByVal conn As SqlConnection)        If (conn.State <> ConnectionState.Closed) Then       '判断源对象是否关闭            conn.Close()      '关闭连接            conn = Nothing          '不指向原对象        End If    End Sub    ''' <summary>    ''' 关闭命令    ''' </summary>    ''' <param name="cmd">需要关闭的命令</param>    ''' <remarks></remarks>    Public Sub CloseCmd(ByVal cmd As SqlCommand)        If Not IsNothing(cmd) Then  '如果CMD命令存在            cmd.Dispose()             '销毁命令            cmd = Nothing        End If    End SubEnd Class

    sqlhelper类代码分为三部分,第一部分为数据库连接设置部分;第二部分是四个数据库操作,从上到下依次为:有参数的查询、无参数的查询、有参数的更新、无参数的更新;第三部分为关闭连接和销毁命令部分。每一次调用这个类,在结尾都需要关闭命令和连接。查询操作需要返回查询结果,没有返回值得需要返回Integer类型的0或1来判断是否操作成功。

看看D层代码时如何调用sql helper的:

查询操作(有参数):

Imports System.Data.SqlClientImports System.DataImports Charge.DAL.sqlHelperPublic Class Login    Public user1 As Charge.Model.User    Dim strSQL As String    Dim help As New sqlHelper        Public Function SelectUsers(user1 As Charge.Model.User) As DataTable        strSQL = "select *  from User_Info where [email protected] and [email protected]"        Dim sqlPara As SqlParameter() = {        New SqlParameter("@UserName", user1.UserName),        New SqlParameter("@PassWord", user1.PassWord)        }        Return  help.ParaSelect(strSQL, CommandType.Text, sqlPara)    End FunctionEnd Class

    这个模块时登录模块,使用用户名和密码作为参数,返回值为DataTable表格。

更新(添加)操作(有参数):

Imports System.Data.SqlClientImports Charge.DAL.sqlHelperImports System.DataPublic Class AddUsers    Dim strSQL As String    Dim help As New sqlHelper    Public Function AddUser(user3 As Charge.Model.User) As Integer        strSQL = "insert into [User_Info] (UserName,PassWord,Level,RealName)values(@UserName,@PassWord,@Level,@RealName) "        Dim sqlPara As SqlParameter() = {        New SqlParameter("@UserName", user3.UserName),        New SqlParameter("@PassWord", user3.PassWord),        New SqlParameter("@Level", user3.Level),        New SqlParameter("@RealName", user3.RealName)        }        Return help.ParaDataManager(strSQL, CommandType.Text, sqlPara)    End FunctionEnd Class
   这个模块时插入模块,使用了四个参数,返回值类型为Integer。
   这里没有用到设计模式,只是进行了封装,没有用到泛化和继承,随着进一步的学习,会有更好的办法来解决重复的问题。