vb.net之SqlHelper的编写与应用

前端之家收集整理的这篇文章主要介绍了vb.net之SqlHelper的编写与应用前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

上次文章中说到。对于一个项目来说,sqlHelper是一个很重要的类。

在正在构造的机房收费系统中。有大量的操作数据库的操作。如今,把重复的代码全部拿出来,就形成了sqlHelper类。这个sqlHelper执行参数化查询至于使用,只需要提供相应的sql语句和参数。就可以执行数据库的操作了。

实现声明一下啊。这个例子 我也不知道能不能用在机房收费系统上。刚学完设计模式,突发奇想在数据库链接上,加上了一个单例模式。如果出现什么不显示的情况,请联系我。

接下来看一下,sqlHelper是如何写的。以及如何在D层中使用的。

  1. Imports System.Data.sqlClient
  2. Imports System.Configuration
  3.  
  4. Public NotInheritable Class sqlHelper
  5. ''' <summary>
  6. ''' 定义连接对象 cmd 命令
  7. ''' </summary>
  8. ''' <remarks></remarks>
  9. Dim Connsql As sqlConnection '连接字符串
  10. Dim cmdsql As New sqlCommand
  11.  
  12. '创建链接,使用自己的链接方式(也算是一个单例模式吧)
  13. Public Sub New()
  14. Connsql = sqlConnectionDAL.GetConn '使用自己的sqlconnection
  15. End Sub
  16.  
  17. ''' <summary>
  18. ''' 带参数的查询
  19. ''' </summary>
  20. ''' <param name="strText">sql语句</param>
  21. ''' <param name="cmdType">查询类型</param>
  22. ''' <param name="sqlParams">句子中的参数</param>
  23. ''' <returns></returns>向数据库 提取 指定的数据
  24. ''' <remarks></remarks>
  25. Public Function Query(ByVal strText As String,ByVal cmdType As CommandType,ByVal sqlParams As sqlParameter()) As DataTable
  26. Dim sqlAdapater As sqlDataAdapter
  27. Dim dtsql As New DataTable
  28. Dim dssql As New DataSet
  29.  
  30. cmdsql.CommandText = strText
  31. cmdsql.CommandType = cmdType
  32. cmdsql.Connection = Connsql
  33.  
  34. cmdsql.Parameters.AddRange(sqlParams)
  35. sqlAdapater = New sqlDataAdapter(cmdsql)
  36.  
  37. Try
  38. sqlAdapater.Fill(dssql)
  39. dtsql = dssql.Tables(0)
  40. cmdsql.Parameters.Clear()
  41. Catch ex As Exception
  42. MsgBox(ex.Message,CType(vbOKOnly + MsgBoxStyle.Exclamation,MsgBoxStyle),"警告")
  43. End Try
  44.  
  45. Return dtsql
  46. End Function
  47.  
  48. ''' <summary>
  49. ''' 无参数的查询
  50. ''' </summary>
  51. ''' <param name="strText">sql语句</param>
  52. ''' <param name="cmdType">查询类型</param>
  53. ''' <returns></returns>主要是向数据库中取数据,用来使用
  54. ''' <remarks></remarks>
  55. Public Function QueryNo(ByVal strText As String,ByVal cmdType As CommandType) As DataTable
  56. Dim sqlAdapater As sqlDataAdapter
  57. Dim dtsql As New DataTable
  58. Dim dssql As New DataSet
  59.  
  60. cmdsql.CommandText = strText
  61. cmdsql.CommandType = cmdType
  62. cmdsql.Connection = Connsql
  63.  
  64. '添加参数
  65. sqlAdapater = New sqlDataAdapter(cmdsql)
  66.  
  67. Try
  68. sqlAdapater.Fill(dssql)
  69. dtsql = dssql.Tables(0)
  70. cmdsql.Parameters.Clear()
  71. Catch ex As Exception
  72. MsgBox(ex.Message,"警告")
  73. End Try
  74.  
  75. Return dtsql
  76. End Function
  77.  
  78. ''' <summary>
  79. ''' 带参数的增删改
  80. ''' </summary>
  81. ''' <param name="strText">sql语句</param>
  82. ''' <param name="cmdType">查询类型:有参数的增删改</param>
  83. ''' <param name="sqlParams">参数</param>
  84. ''' <returns></returns>执行成功返回true
  85. ''' <remarks></remarks>
  86. Public Function UpdDelAlter(ByVal strText As String,ByVal sqlParams As sqlParameter()) As Boolean
  87. cmdsql.CommandText = strText
  88. cmdsql.CommandType = cmdType
  89. cmdsql.Connection = Connsql
  90.  
  91. '添加参数
  92. cmdsql.Parameters.AddRange(sqlParams)
  93.  
  94. Dim flag As Boolean
  95.  
  96. Try
  97. flag = cmdsql.ExecuteNonQuery
  98. cmdsql.Parameters.Clear()
  99. Return flag
  100. Catch ex As Exception
  101. Return False
  102. End Try
  103. End Function
  104. End Class

在上面的例子中,还缺少那个 单例模式。如果感觉不合适的,请自行编写一个数据库的连接方式就可以了。

  1. Imports System.Data.sqlClient
  2. ''' <summary>
  3. ''' 连接字符串 数据库 使用单例模式
  4. ''' </summary>
  5. ''' <remarks></remarks>赵崇 14-5-17
  6. Public Class sqlConnectionDAL
  7.  
  8. ''' <summary>
  9. ''' 定义一个连线字符串
  10. ''' </summary>
  11. ''' <remarks></remarks>赵崇 14-5-17
  12. Private Shared ReadOnly strLink As String = System.Configuration.ConfigurationManager.AppSettings("ConnStr")
  13.  
  14. Public Shared conn As sqlConnection = Nothing
  15.  
  16. '创建一个静态 只读进程 辅助对象
  17. Public Shared ReadOnly syncRoot As New Object
  18.  
  19.  
  20. ''' <summary>
  21. ''' 私有构造函数,外部代码不能使用
  22. ''' </summary>
  23. ''' <remarks></remarks>
  24. Private Sub New()
  25. End Sub
  26.  
  27. Public Shared ReadOnly Property GetConn() As sqlConnection
  28. Get
  29. If conn Is Nothing Then
  30. SyncLock syncRoot '锁,确保只有一个链接可使用
  31. If conn Is Nothing Then
  32. conn = New sqlConnection(strLink)
  33. conn.Open()
  34. End If
  35. End SyncLock
  36. ElseIf conn.State = ConnectionState.Closed Then
  37. conn.Open()
  38. ElseIf conn.State = ConnectionState.Broken Then
  39. conn.Close()
  40. conn.Open()
  41. End If
  42. Return conn
  43. End Get
  44. End Property
  45. End Class


对于以上,项目的sqlHelper就编写完成了。只需要使用就可以了。至于使用。在D层的实现,这里只写一个例子。

咱们就写一个看看吧。

查询表:(不需要参数,如需使用 直接替换sql语句)

  1. ''' <summary>
  2. ''' 获取用户表中的用户级别信息
  3. ''' </summary>
  4. ''' <returns></returns>
  5. ''' <remarks></remarks>
  6. Function GetTable() As DataTable Implements IDAL.IUser.GetUserTable
  7. Dim strsql As String = "Select distinct Level as [用户级别] from User_Info Des"
  8.  
  9. Dim helper As New sqlHelper
  10.  
  11. Dim dtUser = helper.QueryNo(strsql,CommandType.Text)
  12.  
  13. Return dtUser
  14. End Function

删除用户表:(更新 修改 等等 只需要替换相应的sql语句 和参数 即可实现)

  1. ''' <summary>
  2. ''' 删除用户
  3. ''' </summary>
  4. ''' <param name="user">用户信息</param>
  5. ''' <returns></returns>返回true表示删除成功,返回false表示删除失败
  6. ''' <remarks></remarks>赵崇 14-5-21
  7. Public Function DeleteUser(ByVal user As UserEntity) As Boolean Implements IDAL.IUser.DeleteUser
  8. Dim strsql As String
  9. strsql = "Delete from User_Info where UserID=@UserID"
  10. Dim helper As New sqlHelper
  11. Dim sqlparameter As sqlParameter() = {New sqlParameter("@UserID",user.UserID)}
  12.  
  13. Dim flag As Boolean
  14. flag = helper.UpdDelAlter(strsql,CommandType.Text,sqlparameter)
  15. Return flag
  16. End Function


通过上面的例子,你会发现,在于数据库进行操作的时候,仅仅提供sql语句 加 参数。就可以达到自己的目的。sqlHelper类,一次编写,到处使用。大量的节省代码

对于使用三层架构的程序,编写代码的时候,脑子里只有 对象及其方法。在U层写代码的时候,不需要考虑B层的实现过程,只知道B层的返回结果就可以了。

猜你在找的VB相关文章