vb.net如何编写高效率的SQLHelper——(二)代码实战

前端之家收集整理的这篇文章主要介绍了vb.net如何编写高效率的SQLHelper——(二)代码实战前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

上一篇博客《vb.net如何编写高效率的SqlHelper——(一)基础篇》
咱们谈到了很多关系ADO.net的基础知识,那些是看懂本篇文章的前提。所以童鞋们有必要好好看看哦。
本篇选取了最常用的几个方法,而且尽可能的简单化,灵活化(用到了函数重载和读取配置文件
好了,废话不多说,直接上代码

  1. '*************************************************
  2. '作者:刘文彬
  3. '小组:
  4. '说明:利用函数重载,配置文件读取使得程序更加灵活
  5. '创建日期:2015-4-27
  6. '版本号:v1.4
  7. '*************************************************
  8. Imports System.Data
  9. Imports System.Data.sqlClient
  10. Imports System.Configuration
  11. Public Class sqlHelperDAL
  12. '全局配置:连接字符、定义一个cnncmd
  13.  
  14. '增删改,有参数/无参数
  15. '查,有参数/无参数
  16. '全局配置
  17. '连接字符串
  18. 'Dim ConnectionString As String = "Server=Bill\MysqL;Database=Charge_System;User ID=sa;Password="
  19.  
  20. '初始化sqlconnection 对象
  21. Dim cnn As New sqlConnection(Configuration.ConfigurationSettings.AppSettings("ConnectionString")) '读取配置文件,获得ConnectionString的值
  22. Dim cmd As New sqlCommand
  23.  
  24. #Region "有参增删改ExcuteNoQuery,不返回数据行,返回integer型数据表示受影响的行数。此函数被重载"
  25. ''' <summary>
  26. ''' 执行 增删改的数据库操作(有参数版)
  27. ''' </summary>
  28. ''' <param name="cmdText"></param>命令的文本
  29. ''' <param name="cmdType"></param>命令的类型
  30. ''' <param name="sqlParams"></param>要执行的sql语句集,无法确定具体条数
  31. ''' <returns></returns>整型值,表示受影响的行数
  32. ''' <remarks></remarks>
  33. Public Function ExcuteNoQuery(ByVal cmdText As String,ByVal cmdType As CommandType,ByVal sqlParams As sqlParameter()) As Integer
  34.  
  35. '逐条将数组sqlParams中的参数添加Parameters
  36. cmd.CommandType = cmdType '将命令的类型传给commandtype
  37. cmd.Connection = cnn '为执行连接命令的参数connection赋值
  38. cmd.CommandText = cmdText '将sql语句赋值给执行命令的文本commandtext
  39.  
  40. Try
  41. cmd.Parameters.Clear() '清除参数
  42.  
  43. '如果存在sqlparams参数,则添加到cmd对象中
  44. If Not IsNothing(sqlParams) Then
  45. cmd.Parameters.AddRange(sqlParams)
  46. End If
  47.  
  48. '如果没有打开连接,则打开连接
  49. If cnn.State = ConnectionState.Closed Then
  50. cnn.Open()
  51. End If
  52.  
  53. Return cmd.ExecuteNonQuery '执行操作
  54.  
  55. Catch ex As Exception
  56. Return 0
  57. Finally
  58. ConnectionClose(cnn)
  59. CommandClose(cmd)
  60. End Try
  61.  
  62. End Function
  63.  
  64. #End Region
  65.  
  66.  
  67. #Region "无参增删改操作,不返回数据行,返回Integer类型数据表示受影响行数重载ExcuteNoQuery"
  68. ''' <summary>
  69. ''' 执行返回受影响的行数,此处是重载ExcuteNoQuery方法
  70. ''' </summary>
  71. ''' <param name="cmdText"></param>要执行的sql文本命令,或者存储过程名
  72. ''' <param name="cmdType"></param>要执行的命令的类型,sql文本命令或者存储过程名
  73. ''' <returns></returns>Integer类型的数,表示受影响的行数
  74. ''' <remarks></remarks>
  75. Public Function ExuteNoQuery(ByVal cmdText As String,ByVal cmdType As CommandType) As Integer
  76. Return ExcuteNoQuery(cmdText,cmdType,Nothing)
  77. End Function
  78.  
  79. #End Region
  80.  
  81. #Region "无参版,返回第一行第一列的值"
  82. Public Function ExcuteScalar(ByVal cmdText As String,cmdType As CommandType) As Object
  83. Return ExcuteScalar(cmdText,Nothing)
  84. End Function
  85.  
  86. #End Region
  87.  
  88.  
  89. #Region "获取第一行的第一列的值,有参版,该方法被重载"
  90.  
  91. Public Function ExcuteScalar(ByVal cmdText As String,sqlParams As sqlParameter()) As Object
  92.  
  93. Dim result As Object = Nothing
  94. cmd.Connection = cnn
  95. cmd.CommandType = cmdType
  96. cmd.CommandText = cmdText
  97.  
  98. Try
  99. '如果状态没有打开则,进行连接打开操作
  100. If cnn.State = ConnectionState.Closed Then
  101. cnn.Open()
  102. End If
  103. '如果非空则进行参数的全部添加
  104. If Not IsNothing(sqlParams) Then
  105. cmd.Parameters.AddRange(sqlParams)
  106. End If
  107. result = cmd.ExecuteScalar
  108. Return result
  109.  
  110. Catch ex As Exception
  111. Throw New Exception("ExcuteScalar错误:",ex)
  112. Finally
  113. ConnectionClose(cnn)
  114. CommandClose(cmd)
  115. End Try
  116.  
  117. End Function
  118.  
  119. #End Region
  120.  
  121.  
  122. #Region "查询操作,返回datetable,被重载的函数ExcuteSelect"
  123. ''' <summary>
  124. ''' 执行查询的操作,有参版
  125. ''' </summary>
  126. ''' <param name="cmdText"></param>要执行的sql命令文本
  127. ''' <param name="cmdType"></param>命令类型
  128. ''' <param name="sqlParams"></param>要执行数据库操作的sql命令中的参数
  129. ''' <returns></returns>dataTable,查询得出的数据库中的数据表项
  130. ''' <remarks></remarks>
  131. Public Function ExcuteSelect(ByVal cmdText As String,sqlParams As sqlParameter()) As DataTable
  132.  
  133. Dim sqlAdapter As sqlDataAdapter
  134. Dim dataTable As DataTable
  135. Dim dataSet As New DataSet
  136.  
  137. cmd.Connection = cnn
  138. cmd.CommandType = cmdType
  139. cmd.CommandText = cmdText
  140. '为什么此处没有进行cnn.open连接操作也可以连接数据库???,难道是非连接状态的操作?
  141. sqlAdapter = New sqlDataAdapter(cmd)
  142. Try
  143. cmd.Parameters.Clear() '清除参数
  144. '如果传来了sqlparams参数则,添加到cmd对象中
  145. If Not IsNothing(sqlParams) Then
  146. cmd.Parameters.AddRange(sqlParams)
  147. End If
  148. sqlAdapter.Fill(dataSet) 'sqlAdapter dataset 填充
  149. dataTable = dataSet.Tables(0) 'dataTable 为dataSet 的第一个表
  150. Return dataTable '返回获得到的数据
  151. Catch ex As Exception
  152. Throw New Exception("查询失败!" + ex.Message)
  153. Finally
  154. ConnectionClose(cnn)
  155. CommandClose(cmd)
  156. End Try
  157. End Function
  158.  
  159. #End Region
  160.  
  161. #Region "无参查询,返回datetable,此处重载ExcuteSelect函数"
  162. ''' <summary>
  163. ''' 无参查询,返回datetable,此处重载ExcuteSelect
  164. ''' </summary>
  165. ''' <param name="cmdText"></param>要执行的sql文本命令或者存储过程名称
  166. ''' <param name="cmdType"></param>要执行的语句的类型,sql语句或者存储过程
  167. ''' <returns></returns>DataTable对象实例
  168. ''' <remarks></remarks>
  169. Public Function ExcuteSelect(ByVal cmdText As String,ByVal cmdType As CommandType) As DataTable
  170.  
  171. Return ExcuteSelect(cmdText,Nothing)
  172.  
  173. End Function
  174.  
  175. #End Region
  176.  
  177. ''' <summary>
  178. ''' 关闭连接对象,释放资源
  179. ''' </summary>
  180. ''' <param name="cnn"></param>
  181. ''' <remarks></remarks>
  182. Public Sub ConnectionClose(ByVal cnn As sqlConnection)
  183. If cnn.State = ConnectionState.Open Then
  184. cnn.Close()
  185. cnn = Nothing
  186. End If
  187. End Sub
  188.  
  189. ''' <summary>
  190. ''' 关闭cmd对象,释放资源
  191. ''' </summary>
  192. ''' <param name="cmd"></param>
  193. ''' <remarks></remarks>
  194. Public Sub CommandClose(ByVal cmd As sqlCommand)
  195. If Not IsNothing(cmd) Then
  196. cmd.Dispose()
  197. cmd = Nothing
  198. End If
  199. End Sub
  200.  
  201. End Class

小结:最初自己就写了两个简单的函数,最后发现不够用了,只好自己继续进行重构sqlHelper类呗。发现自己第二次再写的时候,对于这个数据库访问助手类已经手到拈来了,写起代码来如行云流水,这大概就是学习的过程,重复次数多了,做多了也就会了。所以,没有你做不到的,请坚信自己一定可以的! 哦,忘了告诉大家,怎么在D层调用了,嗯……其实啊,很简单的啦 所以,这么简单你就自己想想怎么用吧……要知道,没有你做不到的,请坚信自己一定可以的!噢耶

猜你在找的VB相关文章