刚做系统的时候,就听到大家都在说什么SqlHelper。脑中留下一连串的疑问---什么是SqlHelper,SqlHelper应该放在哪,为什么要用SqlHelper?
经过研究,得到了上述问题的答案:
1、 什么是SqlHelper?
SqlHelper是一个基于.NET Framework的数据库操作组件,组件中包含数据库操作方法。说明白点,就是对数据库的操作!
2、SqlHelper应该放在哪?
我将SqlHelper放在了D层,作为D层中的一个类出现。也可以将它单另出来,作为D层之后的另一层出现。
3、为什么要用SqlHelper?
提到这个问题,当然要从用SqlHelper的好处说起。
SqlHelper将所有对数据库的操作提炼出来,放到这个类中。减少了代码的用量。优点是简洁,高性能,不仅仅支持sqlserver,同时支持sqlserver、oracle、access、Mysql数据库。
SqlHelper用于简化你重复的去写那些数据库连接(SqlConnection),SqlCommand,SqlDataReader等等。 SqlHelper 封装过后通常是只需要给方法传入一些参数如数据库连接字符串,SQL参数等,就可以访问数据库了,很方便。
下面来讲述一下SqlHelper的使用。
对数据库的操作总共有四种:增删改查。“增删改”这三种操作返回的都是Boolean值;“查”返回的是一些记录。分别又将这两大类分为有参的和无参的。即,SqlHelper将对数据库的操作分为四种,包括:有参的增删改,无参的增删改,有参的查询,无参的查询。这里所说的有参和无参指的是传入的数据。
具体使用:
Imports System.Data.SqlClient Imports System.Configuration Imports System.Reflection Public Class SqlHelper '通过配置文件获取连接字符串并赋值给所声明的变量conn Dim db As String = ConfigurationSettings.AppSettings("DB") Dim conn As SqlConnection = New SqlConnection(db) '设置连接 Dim cmd As New SqlCommand '定义一个对象命令 '提取重复的代码 ''' <summary> ''' 关闭连接 ''' </summary> ''' <param name="conn">需要关闭的连接</param> ''' <remarks></remarks> Private 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> Private Sub CloseCmd(ByVal cmd As SqlCommand) '如果没有关闭,则关闭命令 If Not IsNothing(cmd) Then '如果cmd命令存在 cmd.Dispose() '销毁 cmd = Nothing End If End Sub '对数据库的操作共分为四种:有参的增删改,无参的增删改,有参的查询,无参的查询 '''<summary>有参数的增删改操作</summary> ''' <param name="strText">需要执行的命令</param> ''' <param name="cmdType">所执行命令的类型,Sql语句或者存储过程</param> ''' <param name ="sqlParams">参数数组</param> ''' <returns>返回执行 增删改 语句受影响的行数,为Integer类型</returns> Public Function ExecuteAddDelAlter(ByVal strText As String, ByVal cmdType As CommandType, ByVal sqlParams As SqlParameter()) As Boolean '将传入的值,分别为cmd的属性赋值 cmd.Parameters.AddRange(sqlParams) '将参数传入 cmd.CommandType = cmdType '设置一个值,解释strText cmd.Connection = conn '设置连接 cmd.CommandText = strText '设置查询的语句 '执行操作 Try conn.Open() '打开连接 Return cmd.ExecuteNonQuery() '执行增操作并返回受影响的行数 cmd.Parameters.Clear() '清除参数 Catch ex As Exception Return False Finally Call CloseConn(conn) Call CloseCmd(cmd) End Try End Function '''<summary>无参数的增删改操作</summary> ''' <param name="strText">需要执行的命令</param> ''' <param name="cmdType">所执行命令的类型,Sql语句或者存储过程</param> ''' <returns>返回执行 增删改 语句受影响的行数,为Integer类型</returns> Public Function ExecuteAddDelAlterNot(ByVal strText As String, ByVal cmdType As CommandType) As Boolean '将传入的值,分别为cmd的属性赋值 cmd.CommandType = cmdType '设置一个值,解释strText cmd.Connection = conn '设置连接 cmd.CommandText = strText '设置查询的语句 '执行操作 Try conn.Open() '打开连接 Return cmd.ExecuteNonQuery() '执行增操作并返回受影响的行数 Catch ex As Exception Return False Finally Call CloseConn(conn) Call CloseCmd(cmd) End Try End Function '''<summary>有参数的查询操作</summary> ''' <param name="strText">需要执行的命令</param> ''' <param name="cmdType">所执行命令的类型,Sql语句或者存储过程</param> ''' <param name ="sqlParams">参数数组</param> ''' <returns>返回执行 查询 语句受影响的行数,为DataTable类型</returns> Public Function ExecuteQuery(ByVal strText As String, ByVal cmdType As CommandType, ByVal sqlParams As SqlParameter()) As DataTable Dim sqlAdapter As New SqlDataAdapter '声明适配器 Dim dt As New DataTable '声明数据表 Dim ds As New DataSet '声明数据缓存 '将传入的值,分别为cmd的属性赋值 cmd.Parameters.AddRange(sqlParams) '将参数传入 cmd.CommandType = cmdType '设置一个值,解释strText cmd.Connection = conn '设置连接 cmd.CommandText = strText '设置查询的语句 sqlAdapter = New SqlDataAdapter(cmd) '实例化适配器 '执行操作 Try conn.Open() '打开连接 sqlAdapter.Fill(dt) '用适配器填充ds 'MsgBox(dt.Rows.Count) 'dt = ds.Tables(0) '返回数据集的第一个表 cmd.Parameters.Clear() '清除参数 Catch ex As Exception MsgBox("查询失败!" + CType(vbOKOnly + MsgBoxStyle.Exclamation, MsgBoxStyle), "警告") Finally Call CloseConn(conn) Call CloseCmd(cmd) End Try Return dt End Function '''<summary>无参数的查询操作</summary> ''' <param name="strText">需要执行的命令</param> ''' <param name="cmdType">所执行命令的类型,Sql语句或者存储过程</param> ''' <returns>返回执行 查询 语句受影响的行数,为DataTable类型</returns> Public Function ExecuteQueryNot(ByVal strText As String, ByVal cmdType As CommandType) As DataTable Dim sqlAdapter As New SqlDataAdapter '声明适配器 Dim dt As New DataTable '声明数据表 Dim ds As New DataSet '声明数据缓存 '将传入的值,分别为cmd的属性赋值 cmd.CommandType = cmdType '设置一个值,解释strText cmd.Connection = conn '设置连接 cmd.CommandText = strText '设置查询的语句 sqlAdapter = New SqlDataAdapter(cmd) '实例化适配器 '执行操作 Try conn.Open() '打开连接 sqlAdapter.Fill(ds) '用适配器填充ds dt = ds.Tables(0) '返回数据集的第一个表 Catch ex As Exception MsgBox("查询失败!" + CType(vbOKOnly + MsgBoxStyle.Exclamation, MsgBoxStyle), "警告") Finally Call CloseConn(conn) Call CloseCmd(cmd) End Try Return dt End Function End ClassSqlHelper很好地体现了封装。
但,SqlHelper查询操作返回的是DataTable类型的,这在提高班那里是行不通的。这才引出了下一篇文章----泛型集合。