上次文章中说到。对于一个项目来说,sqlHelper是一个很重要的类。
在正在构造的机房收费系统中。有大量的操作数据库的操作。如今,把重复的代码全部拿出来,就形成了sqlHelper类。这个sqlHelper执行参数化查询。至于使用,只需要提供相应的sql语句和参数。就可以执行数据库的操作了。
实现声明一下啊。这个例子 我也不知道能不能用在机房收费系统上。刚学完设计模式,突发奇想在数据库的链接上,加上了一个单例模式。如果出现什么不显示的情况,请联系我。
接下来看一下,sqlHelper是如何写的。以及如何在D层中使用的。
Imports System.Data.sqlClient Imports System.Configuration Public NotInheritable Class sqlHelper ''' <summary> ''' 定义连接对象 和 cmd 命令 ''' </summary> ''' <remarks></remarks> Dim Connsql As sqlConnection '连接字符串 Dim cmdsql As New sqlCommand '创建链接,使用自己的链接方式(也算是一个单例模式吧) Public Sub New() Connsql = sqlConnectionDAL.GetConn '使用自己的sqlconnection End Sub ''' <summary> ''' 带参数的查询 ''' </summary> ''' <param name="strText">sql语句</param> ''' <param name="cmdType">查询类型</param> ''' <param name="sqlParams">句子中的参数</param> ''' <returns></returns>向数据库 提取 指定的数据 ''' <remarks></remarks> Public Function Query(ByVal strText As String,ByVal cmdType As CommandType,ByVal sqlParams As sqlParameter()) As DataTable Dim sqlAdapater As sqlDataAdapter Dim dtsql As New DataTable Dim dssql As New DataSet cmdsql.CommandText = strText cmdsql.CommandType = cmdType cmdsql.Connection = Connsql cmdsql.Parameters.AddRange(sqlParams) sqlAdapater = New sqlDataAdapter(cmdsql) Try sqlAdapater.Fill(dssql) dtsql = dssql.Tables(0) cmdsql.Parameters.Clear() Catch ex As Exception MsgBox(ex.Message,CType(vbOKOnly + MsgBoxStyle.Exclamation,MsgBoxStyle),"警告") End Try Return dtsql End Function ''' <summary> ''' 无参数的查询 ''' </summary> ''' <param name="strText">sql语句</param> ''' <param name="cmdType">查询类型</param> ''' <returns></returns>主要是向数据库中取数据,用来使用 ''' <remarks></remarks> Public Function QueryNo(ByVal strText As String,ByVal cmdType As CommandType) As DataTable Dim sqlAdapater As sqlDataAdapter Dim dtsql As New DataTable Dim dssql As New DataSet cmdsql.CommandText = strText cmdsql.CommandType = cmdType cmdsql.Connection = Connsql '添加参数 sqlAdapater = New sqlDataAdapter(cmdsql) Try sqlAdapater.Fill(dssql) dtsql = dssql.Tables(0) cmdsql.Parameters.Clear() Catch ex As Exception MsgBox(ex.Message,"警告") End Try Return dtsql End Function ''' <summary> ''' 带参数的增删改 ''' </summary> ''' <param name="strText">sql语句</param> ''' <param name="cmdType">查询类型:有参数的增删改</param> ''' <param name="sqlParams">参数</param> ''' <returns></returns>执行成功返回true ''' <remarks></remarks> Public Function UpdDelAlter(ByVal strText As String,ByVal sqlParams As sqlParameter()) As Boolean cmdsql.CommandText = strText cmdsql.CommandType = cmdType cmdsql.Connection = Connsql '添加参数 cmdsql.Parameters.AddRange(sqlParams) Dim flag As Boolean Try flag = cmdsql.ExecuteNonQuery cmdsql.Parameters.Clear() Return flag Catch ex As Exception Return False End Try End Function End Class
在上面的例子中,还缺少那个 单例模式。如果感觉不合适的,请自行编写一个数据库的连接方式就可以了。
Imports System.Data.sqlClient ''' <summary> ''' 连接字符串 数据库 使用单例模式 ''' </summary> ''' <remarks></remarks>赵崇 14-5-17 Public Class sqlConnectionDAL ''' <summary> ''' 定义一个连线字符串 ''' </summary> ''' <remarks></remarks>赵崇 14-5-17 Private Shared ReadOnly strLink As String = System.Configuration.ConfigurationManager.AppSettings("ConnStr") Public Shared conn As sqlConnection = Nothing '创建一个静态 只读进程 辅助对象 Public Shared ReadOnly syncRoot As New Object ''' <summary> ''' 私有构造函数,外部代码不能使用 ''' </summary> ''' <remarks></remarks> Private Sub New() End Sub Public Shared ReadOnly Property GetConn() As sqlConnection Get If conn Is Nothing Then SyncLock syncRoot '锁,确保只有一个链接可使用 If conn Is Nothing Then conn = New sqlConnection(strLink) conn.Open() End If End SyncLock ElseIf conn.State = ConnectionState.Closed Then conn.Open() ElseIf conn.State = ConnectionState.Broken Then conn.Close() conn.Open() End If Return conn End Get End Property End Class
对于以上,项目的sqlHelper就编写完成了。只需要使用就可以了。至于使用。在D层的实现,这里只写一个例子。
咱们就写一个看看吧。
''' <summary> ''' 获取用户表中的用户级别信息 ''' </summary> ''' <returns></returns> ''' <remarks></remarks> Function GetTable() As DataTable Implements IDAL.IUser.GetUserTable Dim strsql As String = "Select distinct Level as [用户级别] from User_Info Des" Dim helper As New sqlHelper Dim dtUser = helper.QueryNo(strsql,CommandType.Text) Return dtUser End Function
删除用户表:(更新 修改 等等 只需要替换相应的sql语句 和参数 即可实现)
''' <summary> ''' 删除用户 ''' </summary> ''' <param name="user">用户信息</param> ''' <returns></returns>返回true表示删除成功,返回false表示删除失败 ''' <remarks></remarks>赵崇 14-5-21 Public Function DeleteUser(ByVal user As UserEntity) As Boolean Implements IDAL.IUser.DeleteUser Dim strsql As String strsql = "Delete from User_Info where UserID=@UserID" Dim helper As New sqlHelper Dim sqlparameter As sqlParameter() = {New sqlParameter("@UserID",user.UserID)} Dim flag As Boolean flag = helper.UpdDelAlter(strsql,CommandType.Text,sqlparameter) Return flag End Function
通过上面的例子,你会发现,在于数据库进行操作的时候,仅仅提供sql语句 加 参数。就可以达到自己的目的。sqlHelper类,一次编写,到处使用。大量的节省代码。
对于使用三层架构的程序,编写代码的时候,脑子里只有 对象及其方法。在U层写代码的时候,不需要考虑B层的实现过程,只知道B层的返回结果就可以了。