VB.NET版机房收费系统之SqlHelper2015-07-04SqlHelper,最早接触这个词儿的时候,好像是13年的暑假,那个夏天来的比往年来的稍晚一些,呵呵,sqlhelper,翻译成中文就是数据库助手,帮手。百度百科这样对她进行阐述:SqlHelper是一个基于.NET Framework的数据库操作组件。组件中包含数据库操作方法。SqlHelper用于简化我们重复的去写那些数据库连接(SqlConnection),SqlCommand,SqlDataReader等等。SqlHelper 封装过后通常是只需要给方法传入一些参数如数据库连接字符串,SQL参数等,就可以访问数据库了,很方便!可是,好好的,我们为什么要用SqlHlper?我想百度百科上的解释已经很清楚很明白了,SqlHlper是在D层中的代码抽象出来的,那D层中什么样的代码才能抽象出来?原来啊,就是把那些对数据库进行增删改查的操作,存储过程及程序集等中相同的代码抽象出来!在 SqlHelper 类中实现的方法包括:ExecuteNonQuery。此方法用于执行(有参数或无参数的)不返回任何行或值的命令。这些命令通常用于执行数据库(增删改)更新,但也可用于返回存储过程的输出参数。ExecuteReader。此方法用于返回 SqlDataReader 对象,该对象包含由某一命令返回的结果集。ExecuteDataset。此方法返回 DataSet 对象,该对象包含由某一命令返回的结果集。下面是SqlHelper的具体实现:
Imports System.Data.SqlClientImports System.ConfigurationPublic Class SqlHelper"定义连接字符串Dim strConnection As String = System.Configuration.ConfigurationSettings.AppSettings("strConnection")"定义连接Dim conn As SqlConnection"定义命令Dim cmd As SqlCommand"初始化连接对象Public Sub New()conn = New SqlConnection(strConnection)End Sub"/// <summary>"/// depiction:<有参数的非查询的操作>"/// </summary>"/// <param name="<strText>"><增删改语句或者存储过程></param>"/// <param name="<cmdType>"><命令类型文本或者存储过程></param>"/// <param name="<sqlParameter>"><参数数组></param>"/// <returns>"/// <返回布尔值>"/// </returns>Public Function ExecuteNonQuery(ByVal strText As String, ByVal cmdType As CommandType, ByVal sqlParameter As SqlParameter()) As BooleanDim cmd As New SqlCommand "定义命令cmd.CommandText = strText "sql语句或存储过程名字cmd.CommandType = cmdType "命令类型是StoredProcedure时,调用存储过程,一般为CommandTextcmd.Connection = conn "连接数据库cmd.Parameters.AddRange(sqlParameter) "传参Dim flag As Boolean = False"定义返回值Tryconn.Open()"打开数据库连接flag = cmd.ExecuteNonQuerycmd.Parameters.Clear()Catch ex As Exceptionflag = FalseFinallyCall CloseConnection(conn)"关闭数据库连接Call CloseCmd(cmd)End TryReturn flagEnd Function"/// <summary>"/// depiction:<获取一个带参数的查询结果阅读器>"/// </summary>"/// <param name="<strText>"><增删改语句或者存储过程></param>"/// <param name="<cmdType>"><命令类型文本或者存储过程></param>"/// <param name="<sqlParameter>"><参数数组></param>"/// <returns>"/// <返回布尔值>"/// </returns>Public Function ExecuteReader(ByVal strText As String, ByVal cmdType As CommandType, ByVal sqlParameter As SqlParameter()) As BooleanDim cmd As New SqlCommandDim reader As SqlDataReadercmd.CommandText = strText "sql语句或存储过程名字cmd.CommandType = cmdType"命令类型是StoredProcdeure时,调用存储过程,一般为CommandTextcmd.Connection = conncmd.Parameters.AddRange(sqlParameter) "传参Dim flag As Boolean = False"定义返回值Tryconn.Open()reader = cmd.ExecuteReaderflag = reader.Read()cmd.Parameters.Clear()Catch ex As Exceptionflag = FalseFinallyCall CloseConnection(conn)Call CloseCmd(cmd)End TryReturn flagEnd Function"/// <summary>"/// depiction:<获取一个带参数的查询DataTable结果集>"/// </summary>"/// <param name="<strText>"><增删改语句或者存储过程></param>"/// <param name="<cmdType>"><命令类型文本或者存储过程></param>"/// <param name="<sqlParameter>"><参数数组></param>"/// <returns>"/// <返回DataTable>"/// </returns>Public Function ExecuteReaderTable(ByVal strText As String, ByVal cmdType As CommandType, ByVal sqlParameter As SqlParameter()) As DataTableDim cmd As New SqlCommand"定义命令Dim dataAdapter As New SqlDataAdapter "定义一个适配器对象Dim dst As New DataSetDim dt As New DataTablecmd.CommandText = strText"sql语句或存储过程名字cmd.CommandType = cmdType"命令类型是StoredProcdeure时,调用存储过程,一般为CommandTextcmd.Connection = conn"连接数据库cmd.Parameters.AddRange(sqlParameter) "传参Tryconn.Open()dataAdapter.SelectCommand = cmddataAdapter.Fill(dst)dt = dst.Tables(0)Catch ex As ExceptionCall CloseConnection(conn)Call CloseCmd(cmd)End TryReturn dtEnd Function"/// <summary>"/// depiction:<获取上机人数>"/// </summary>"/// <param name="<strText>"><增删改语句或者存储过程></param>"/// <param name="<cmdType>"><命令类型文本或者存储过程></param>"/// <param name="<sqlParameter>"><参数数组></param>"/// <returns>"/// <返回整型>"/// </returns>Public Function ExecuteScalar(ByVal cmdText As String, ByVal cmdType As CommandType, ByVal sqlParameter As SqlParameter()) As IntegerDim cmd As New SqlCommandDim count As Integercmd.CommandText = cmdTextcmd.CommandType = cmdTypecmd.Connection = conncmd.Parameters.AddRange(sqlParameter)Tryconn.Open()count = cmd.ExecuteScalarCatch ex As ExceptionThrow New Exception(ex.Message.ToString())FinallyCall CloseCounection(conn)Call CloseCmd(cmd)End TryReturn countEnd Function"/// <summary>"/// depiction:<算取金额>"/// </summary>"/// <param name="<strText>"><增删改语句或者存储过程></param>"/// <param name="<cmdType>"><命令类型文本或者存储过程></param>"/// <param name="<sqlParameter>"><参数数组></param>"/// <returns>"/// <返回integer>"/// </returns>Public Function ExecuteScalarCash(ByVal cmdText As String, ByVal cmdType As CommandType, ByVal sqlParameter As SqlParameter()) As DecimalDim cmd As New SqlCommandDim cash As Decimalcmd.CommandText = cmdTextcmd.CommandType = cmdTypecmd.Connection = conncmd.Parameters.AddRange(sqlParameter)Dim i As StringTryconn.Open()i = cmd.ExecuteScalar.ToString()If i = "" Thencash = 0.0Elsecash = iEnd IfCatch ex As ExceptionThrow New Exception(ex.Message.ToString())FinallyCall CloseConnection(conn)Call CloseCmd(cmd)End TryReturn cashEnd FunctionPublic Sub CloseConnection(ByVal conn As SqlConnection)If Not IsNothing(conn.State <> ConnectionState.Closed) Thenconn.Close() "关闭连接conn = NothingEnd IfEnd SubPrivate Sub CloseCmd(cmd As SqlCommand)If Not IsNothing(cmd) Then "判断是否为空cmd.Dispose()cmd = NothingEnd IfEnd SubEnd Class
SqlHelper封装成一个类,为开发人员选择访问数据库的方式提供了灵活性,每种方法的重载都支持不同的方法参数,因此开发人员可以确定传递连接、事务和参数信息的方式。像是打包,封装的思想完美诠释,抽离出相同的内容,使代码得到复用!作者:csdn博客 丁国华