您的位置:首页 > 数据库

【机房重构】Sqlhelper类解读

2016-04-17 21:26 411 查看


定义

SqlHelper是一个基于.NET Framework的数据库操作组件。组件中包含数据库操作方法。SqlHelper用于简化你重复的去写那些数据库连接(SqlConnection),SqlCommand,SqlDataReader等等。SqlHelper 封装过后通常是只需要给方法传入一些参数如数据库连接字符串,SQL参数等,就可以访问数据库了,很方便。



分类

在 SqlHelper 类中实现的方法包括:
ExecuteNonQuery。此方法用于执行不返回任何行或值的命令。这些命令通常用于执行数据库更新,但也可用于返回存储过程的输出参数。
ExecuteReader。此方法用于返回SqlDataReader对象,该对象包含由某一命令返回的结果集。
ExecuteDataset。此方法返回DataSet对象,该对象包含由某一命令返回的结果集。
ExecuteScalar。此方法返回一个值。该值始终是该命令返回的第一行的第一列。
ExecuteXmlReader。此方法返回 FOR XML 查询的 XML 片段。

除了这些公共方法外,SqlHelper 类还包含一些专用函数,用于管理参数和准备要执行的命令。不管客户端调用什么样的方法实现,所有命令都通过 SqlCommand 对象来执行。在 SqlCommand 对象能够被执行之前,所有参数都必须添加到 Parameters 集合中,并且必须正确设置 Connection、CommandType、CommandText 和 Transaction 属性。
    SqlHelper 类中的专用函数主要用于提供一种一致的方式,以便向 SQL Server 数据库发出命令,而不考虑客户端应用程序调用的重载方法实现。SqlHelper 类中的专用实用程序函数包括:
AttachParameters:该函数用于将所有必要的 SqlParameter 对象连接到正在运行的 SqlCommand。
AssignParameterValues:该函数用于为 SqlParameter 对象赋值。
PrepareCommand:该函数用于对命令的属性(如连接、事务环境等)进行初始化。
ExecuteReader:此专用 ExecuteReader 实现用于通过适当的 CommandBehavior 打开SqlDataReader对象,以便最有效地管理与阅读器关联的连接的有效期。
如果使用SqlHelper方法调用数据库存储过程,需要获取存储过程的返回值,请使用带有SqlParameter[]参数的方法,Object参数的方法无法获取存储过程返回值。


实例解读

	在本文中,小编重点介绍了四种类:ExecuteNoQuery、ExecuteQuery、ExecuteNo和Execute,分别是执行增删改(无参)、增删改(有参)、查询(无参)和查询(有参)。

'**********************************************
'文 件 名:LoginSqlHelper
'命名空间:SqlHelper
'内    容:
'功    能:
'文件关系:
'作    者:杨倩
'小    组:
'生成日期:2016/3/10 21:16:42
'版  本号:V1.0.0.0
'修改日志:
'版权说明:
'**********************************************
Imports System.Configuration
Imports System.Data.SqlClient
Imports System.Data

Public Class LoginSqlHelper

Dim strConnection As String = System.Configuration.ConfigurationManager.AppSettings("sqlConnectStr")
'configurationManager表示配置文件  APPsettings获取配置文件数据

Dim conn As SqlConnection   '定义连接
Dim cmd As SqlCommand '定义命令变量
Public Sub New()    '初始化连接对象
conn = New SqlConnection(strConnection)
cmd = New SqlCommand
End Sub

''' <summary>
''' 执行增删改三个操作,(无参)返回值为boolean类型,确认是否执行成功
''' </summary>
''' <param name="strText">需要执行语句,一般是sql语句,也有存储过程</param>
''' <param name="cmdType">判断SQL语句的类型,一般都不是存储过程</param>
''' <returns>受影响的行数</returns>
''' <remarks></remarks>
Public Function ExecuteNoQuery(ByVal strText As String, ByVal cmdType As CommandType) As Boolean

cmd.CommandText = strText   '命令文本
cmd.CommandType = cmdType   '命令类型
cmd.Connection = conn     '连接数据库

Dim flag As Boolean = False

conn.Open()
flag = cmd.ExecuteNonQuery()

Call CloseConnection(conn)
Call CloseCmd(cmd)
Return flag

End Function
''' <summary>
''' 执行增删改三个操作,(有参)返回值为boolean类型,确认是否执行成功
''' </summary>
''' <param name="strText">需要执行语句,一般是sql语句,也有存储过程</param>
''' <param name="cmdType">判断SQL语句的类型,一般都不是存储过程</param>
''' <param name="sqlParams">参数数组,无法确认有多少参数</param>
''' <returns></returns>
''' <remarks></remarks>

Public Function ExecuteQuery(ByVal strText As String, ByVal cmdType As CommandType, ByVal sqlParams As SqlParameter()) As Boolean

cmd.CommandText = strText '命令文本
cmd.CommandType = cmdType '命令类型是存储过程
cmd.Connection = conn '连接数据库
'读取数据库中的表
cmd.Parameters.AddRange(sqlParams) '传参

Dim flag As Boolean = False

conn.Open()
flag = cmd.ExecuteNonQuery
cmd.Parameters.Clear()

Call CloseConnection(conn)
Call CloseCmd(cmd)

Return flag

End Function

''' <summary>
''' 执行查询的操作,(无参)
''' </summary>
''' <param name="cmdText">需要执行语句,一般是Sql语句,也有存储过程</param>
''' <param name="cmdType">判断Sql语句的类型,一般都不是存储过程</param>
''' <returns>查询到的表格</returns>
''' <remarks></remarks>
Public Function ExecuteNo(ByVal cmdText As String, ByVal cmdType As CommandType) As DataTable

cmd.CommandText = cmdText
cmd.CommandType = cmdType '命令类型是存储过程
cmd.Connection = conn

Dim adaptor As SqlClient.SqlDataAdapter              '读取数据库中的表
Dim adataset As New DataSet

adaptor = New SqlDataAdapter(cmd)

adaptor.Fill(adataset)
Return adataset.Tables(0)

Call CloseConnection(conn)
Call CloseCmd(cmd)

End Function

''' <summary>
''' 执行查询的操作,(有参),参数不限
''' </summary>
''' <param name="cmdText">需要执行语句,一般是Sql语句,也有存储过程</param>
''' <param name="cmdType">判断Sql语句的类型,一般都不是存储过程</param>
''' <param name="paras">传入的参数</param>
''' <returns></returns>
''' <remarks></remarks>
Public Function Execute(ByVal cmdText As String, ByVal cmdType As CommandType, ByVal paras As SqlParameter()) As DataTable

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(paras)  '参数添加
sqlAdapter = New SqlDataAdapter(cmd)  '实例化adapter适配器

sqlAdapter.Fill(ds)           '用adapter将dataSet填充
dt = ds.Tables(0)             'datatable为dataSet的第一个表
cmd.Parameters.Clear()        '清除参数

'MsgBox("查询失败", CType(vbOKOnly + MsgBoxStyle.Exclamation, MsgBoxStyle), "警告")
'最后一定要销毁cmd
Call CloseConnection(conn)
Call CloseCmd(cmd)

Return dt
End Function

'/// <summary>
'/// depiction:<关闭命令>
'/// </summary>
'/// <param name="<参数名称>"><参数说明></param>
'/// <returns>
'///<返回为>
' /// </returns>
Public Sub CloseCmd(ByVal cmd As SqlCommand)
If Not IsNothing(cmd) Then  '判断是否为空
cmd.Dispose()   '销毁
cmd = Nothing
End If
End Sub

'/// <summary>
'/// depiction:<关闭连接>
'/// </summary>
'/// <param name="<参数名称>"><参数说明></param>
'/// <returns>
'///<返回为>
' /// </returns>
Public Sub CloseConnection(ByVal conn As SqlConnection)
If Not IsNothing(conn.State <> ConnectionState.Closed) Then
conn.Close()
conn = Nothing    '关闭连接
End If
End Sub
End Class


总结

依小编来看,sqlhelper类就是一个工具,不仅适用于SQL server同样适用于其他MySql、SqlServer、Oracle、Access数据库,如果是MySql,可以使用MySqlHelper,如果是Access,可以使用AccessHelper。如果是Oracle则可以使用OracleHelper类。并且,适用性强。根据功能需求的不同,选择适合的编写方法。从陌生到熟悉是需要不断探索的,成长是一件伟大的事情。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: