为了提高软件的灵活性和可维护性,软件的代码须要科学的管理。我们引入了架构这个词。设计模式提醒我们,软件中反复性的代码须要封装起来。

近期在做收费系统时。须要和数据库进行频繁的联系。既然是反复的使用,就须要封装,这里使用到了sql
helper 。

先来看看百度对sqohelper的解释:一个基于.NETFframework的数据库操作组件。尽管不知道组件的详细含义。还是能够猜出来它就是D层中对数据库操作进行封装的工具。

数据库的操作,不外乎四种模式,增、删、改、查,依据返回值来区分,能够分为有返回值和无返回值两大类,增、删、改操作是不须要返回值的,查询操作返回值就是查询结果。这些操作各自都有两种操作方式,有參数和无參数的。无參数的就是对整张表的操作,有參数的是对个别字段的操作。

sql helper用到的方法或函数或參数:

ExecuteNonQuery :此方法用于运行没有返回值的命令(有參数或者没有參数)。它通经常使用于运行数据库(增、删、改)命令,也可用于返回存储过程的输出參数。

Parameters:此參数用于运行有參数的查询或更新(增、删、改)操作。

sql Command: 此函数用于封装数据库操作命令。

CommandType:用于设置数据库连接类型

CommandText:用于设置数据库连接语句。

看一下sql helper类代码:

  1. Imports System.Data.SqlClient
  2. Imports System.Configuration
  3. Imports System.Data
  4. '须要在管理器中加入引用
  5. Public Class sqlHelper
  6. '定义变量
  7. Dim ConnString As String = "Server=.;Database=Charge;User=sa;PassWord=123456"
  8. '获得数据库连接字符串
  9. Private ReadOnly strConnection As String = ConfigurationSettings.AppSettings("ConnString")
  10. Dim conn As SqlConnection = New SqlConnection(strConnection)
  11. '定义CMD命令
  12. Dim cmd As New SqlCommand
  13. ''' <summary>
  14. ''' 运行查询操作(有參数),參数没有限制
  15. ''' </summary>
  16. ''' <param name="cmdText">须要运行的语句,通常是SQL语句。也可能是存储过程</param>
  17. ''' <param name="cmdType">推断SQL语句的类型。一般不是存储过程</param>
  18. ''' <param name="sqlparameters">传入參数</param>
  19. ''' <returns></returns>
  20. ''' <remarks></remarks>
  21. Public Function ParaSelect(ByVal cmdText As String, ByVal cmdType As CommandType, ByVal sqlparameters As SqlParameter()) As DataTable
  22. '
  23. Using conn As New SqlConnection(ConnString) '
  24. Dim sqlAdapter As SqlDataAdapter '
  25. Dim dt As New DataTable '
  26. Dim ds As New DataSet '
  27. 'CMD赋值
  28. cmd.CommandText = cmdText
  29. cmd.CommandType = cmdType
  30. cmd.Connection = conn
  31. cmd.Parameters.AddRange(sqlparameters) '加入參数
  32. sqlAdapter = New SqlDataAdapter(cmd) '实例化adapter
  33. Try
  34. sqlAdapter.Fill(ds) '用adapter将dataSet填充
  35. dt = ds.Tables(0) 'datatabledataSet的第一个表
  36. cmd.Parameters.Clear() '清除參数
  37. Catch ex As Exception '抛出异常
  38. MsgBox("查询失败", CType(vbOKOnly + MsgBoxStyle.Exclamation, MsgBoxStyle), "警告")
  39. Finally
  40. Call CloseCmd(cmd) '销毁cmd命令
  41. End Try
  42. Return dt
  43. End Using
  44. End Function
  45. ''' <summary>
  46. ''' 运行查询操作(无參数)
  47. ''' </summary>
  48. ''' <param name="cmdText">同上</param>
  49. ''' <param name="cmdType">同上</param>
  50. ''' <returns>dataTable查询到表格</returns>
  51. ''' <remarks></remarks>
  52. Public Function NonParaSelect(cmdText As String, cmdType As CommandType) As DataTable
  53. Using conn As New SqlConnection(ConnString)
  54. Dim sqlAdapter As SqlDataAdapter
  55. Dim ds As New DataSet
  56.  
  57. cmd.CommandText = cmdText
  58. cmd.CommandType = cmdType
  59. cmd.Connection = conn
  60. sqlAdapter = New SqlDataAdapter(cmd)
  61. Try
  62. sqlAdapter.Fill(ds)
  63. Return ds.Tables(0)
  64. '抛出异常。无返回值
  65. Catch ex As Exception
  66. Return Nothing
  67. Finally
  68. Call CloseCmd(cmd) '关闭CMD命令
  69. End Try
  70. End Using
  71. End Function
  72. ''' <summary>
  73. ''' 运行增、删、改操作(有參数)。使用Integer作为返回值类型。0操作失败。1操作成功
  74. ''' </summary>
  75. ''' <param name="cmdText">须要运行的语句</param>
  76. ''' <param name="cmdType">推断SQL语句类型</param>
  77. ''' <param name="sqlParameter">參数数组,參数没有限制</param>
  78. ''' <returns></returns>
  79. ''' <remarks></remarks>
  80. Public Function ParaDataManager(ByVal cmdText As String, ByVal cmdType As CommandType, ByVal sqlParameter As SqlParameter()) As Integer
  81. '使用Usingkeyword实例化连接字符串。给cmd赋值
  82. Using conn As New SqlConnection(ConnString)
  83. cmd.Parameters.AddRange(sqlParameter)
  84. cmd.CommandType = cmdType '设置一个值,解释cmdText
  85. cmd.Connection = conn '设置连接,全局变量
  86. cmd.CommandText = cmdText '设置查询语句
  87. Try
  88. conn.Open() '打开连接
  89. Return cmd.ExecuteNonQuery '运行操作
  90. cmd.Parameters.Clear() '清除參数
  91. Catch ex As Exception '抛出异常
  92. Return 0
  93. Finally
  94. Call CloseConn(conn)
  95. Call CloseCmd(cmd)
  96. End Try
  97. End Using
  98. End Function
  99. ''' <summary>
  100. ''' 运行增、删、改操作(无參数)
  101. ''' </summary>
  102. ''' <param name="cmdType">同上</param>
  103. ''' <param name="cmdText">同上</param>
  104. ''' <returns></returns>
  105. ''' <remarks></remarks>
  106. Public Function NonParaDataManager(ByVal cmdType As CommandType, ByVal cmdText As String) As Integer
  107. '使用Using keyword实例化连接字符串
  108. Using conn As New SqlConnection(ConnString)
  109. cmd.CommandText = cmdText '设置查询语句
  110. cmd.CommandType = cmdType '设置SQL语句类型
  111. cmd.Connection = conn '设置连接
  112. Try '运行操作
  113. conn.Open()
  114. Return cmd.ExecuteNonQuery '返回值
  115. Catch ex As Exception
  116. Return 0 '抛出异常。返回0表示操作失败
  117. Finally
  118. Call CloseCmd(cmd)
  119. Call CloseConn(conn)
  120. End Try
  121. End Using
  122. End Function
  123. ''' <summary>
  124. ''' 关闭连接
  125. ''' </summary>
  126. ''' <param name="conn">须要关闭的连接 </param>
  127. ''' <remarks></remarks>
  128. Public Sub CloseConn(ByVal conn As SqlConnection)
  129. If (conn.State <> ConnectionState.Closed) Then '推断源对象是否关闭
  130. conn.Close() '关闭连接
  131. conn = Nothing '不指向原对象
  132. End If
  133. End Sub
  134. ''' <summary>
  135. ''' 关闭命令
  136. ''' </summary>
  137. ''' <param name="cmd">须要关闭的命令</param>
  138. ''' <remarks></remarks>
  139. Public Sub CloseCmd(ByVal cmd As SqlCommand)
  140. If Not IsNothing(cmd) Then '假设CMD命令存在
  141. cmd.Dispose() '销毁命令
  142. cmd = Nothing
  143. End If
  144. End Sub
  145. End Class

sqlhelper类代码分为三部分。第一部分为数据库连接设置部分;第二部分是四个数据库操作,从上到下依次为:有參数的查询、无參数的查询、有參数的更新、无參数的更新;第三部分为关闭连接和销毁命令部分。每一次调用这个类,在结尾都须要关闭命令和连接。查询操作须要返回查询结果,没有返回值得须要返回Integer类型的0或1来推断是否操作成功。

看看D层代码时怎样调用sql helper的:

查询操作(有參数):

  1. Imports System.Data.SqlClient
  2. Imports System.Data
  3. Imports Charge.DAL.sqlHelper
  4.  
  5. Public Class Login
  6. Public user1 As Charge.Model.User
  7. Dim strSQL As String
  8. Dim help As New sqlHelper
  9.  
  10. Public Function SelectUsers(user1 As Charge.Model.User) As DataTable
  11. strSQL = "select * from User_Info where UserName=@UserName and PassWord=@PassWord"
  12. Dim sqlPara As SqlParameter() = {
  13. New SqlParameter("@UserName", user1.UserName),
  14. New SqlParameter("@PassWord", user1.PassWord)
  15. }
  16. Return help.ParaSelect(strSQL, CommandType.Text, sqlPara)
  17. End Function
  18. End Class

这个模块时登录模块,使用username和password作为參数,返回值为DataTable表格。

更新(加入)操作(有參数):

  1. Imports System.Data.SqlClient
  2. Imports Charge.DAL.sqlHelper
  3. Imports System.Data
  4.  
  5. Public Class AddUsers
  6. Dim strSQL As String
  7. Dim help As New sqlHelper
  8.  
  9. Public Function AddUser(user3 As Charge.Model.User) As Integer
  10. strSQL = "insert into [User_Info] (UserName,PassWord,Level,RealName)values(@UserName,@PassWord,@Level,@RealName) "
  11. Dim sqlPara As SqlParameter() = {
  12. New SqlParameter("@UserName", user3.UserName),
  13. New SqlParameter("@PassWord", user3.PassWord),
  14. New SqlParameter("@Level", user3.Level),
  15. New SqlParameter("@RealName", user3.RealName)
  16. }
  17. Return help.ParaDataManager(strSQL, CommandType.Text, sqlPara)
  18. End Function
  19. End Class

这个模块时插入模块。使用了四个參数。返回值类型为Integer。

这里没实用到设计模式,仅仅是进行了封装,没实用到泛化和继承。随着进一步的学习,会有更好的办法来解决反复的问题。

数据操作的封装--sqlhelper的更多相关文章

  1. 基于 Aspose.Cells与XML导入excel 数据----操作类封装

    前言 导入excel数据, 在每个项目中基本上都会遇到,第三方插件或者基于微软office,用的最多的就是npoi,aspose.cells和c#基于office这三种方式,其中各有各的优缺点,在这也 ...

  2. StackExchange.Redis帮助类解决方案RedisRepository封装(字符串类型数据操作)

    本文版权归博客园和作者本人共同所有,转载和爬虫请注明原文链接 http://www.cnblogs.com/tdws/tag/NoSql/ 目录 一.基础配置封装 二.String字符串类型数据操作封 ...

  3. 手把手封装数据层之DataUtil数据库操作的封装

    上一篇我们写完了数据库连接的封装 没有看的请移步上一篇关于数据库连接的内容 这次我们讲数据库操作的封装.数据库的操作就是增删改查:心再大一点就可以直接分为查询和其他. 因为查询是有返回对象的,而其他都 ...

  4. Java中使用自定义类封装数组,添加类方法实现数据操作

    1.具体见注释 2.后续或有更新 public class MyArray { private long[] array; private int cnt; // 自定义数组类的元素个数 /** 使用 ...

  5. XML序列化 判断是否是手机 字符操作普通帮助类 验证数据帮助类 IO帮助类 c# Lambda操作类封装 C# -- 使用反射(Reflect)获取dll文件中的类型并调用方法 C# -- 文件的压缩与解压(GZipStream)

    XML序列化   #region 序列化 /// <summary> /// XML序列化 /// </summary> /// <param name="ob ...

  6. C# .NET更智能的数据库操作的封装

    前述: 对数据库操作的封装,相信网络上已经有一大堆,ORM框架,或者是.NET本身的EF,都很好的支持数据库操作.这篇文章是分享自己所思考的,对数据库操作的简单封装.我对于这篇文章,认为被浏览者所关注 ...

  7. ADO.NET复习总结(6)-断开式数据操作

    一.基础知识 主要类及成员(和数据库无关的)(1)类DataSet:数据集,对应着库,属性Tables表示所有的表(2)类DataTable:数据表,对应着表,属性Rows表示所有的行(3)类Data ...

  8. 【转载】微软官方提供的Sqlserver数据库操作帮助类SQLHelper类

    在.NET平台中,C#语言一般使用ADO.NET组件来操作Sqlserver数据库,通过ADO.NET组件可以实现连接数据库.查询数据集.执行SQL语句以及关闭数据库连接等操作,为此网上有很多开发者自 ...

  9. Asp.Net Core 2.0 项目实战(4)ADO.NET操作数据库封装、 EF Core操作及实例

    Asp.Net Core 2.0 项目实战(1) NCMVC开源下载了 Asp.Net Core 2.0 项目实战(2)NCMVC一个基于Net Core2.0搭建的角色权限管理开发框架 Asp.Ne ...

随机推荐

  1. 使用filezella服务器安装ftp

    使用FileZilla配置FTP站点,可参考以下步骤: 1.打开Filezilla Server服务端: 点击[Edit]->[Users],或者点击如下图标新增用户. 2.添加FTP帐号后,设 ...

  2. wamp服务器下安装mantis

    什么是Mantis Mantis是一个BUG管理系统.主要特点如下: 1.用php写的系统,安装方便,不用像 bugzilla 那样安装那么多perl支持: 2.系统相对简单轻磅,使用简单: 3.出色 ...

  3. jquery的this和$(this)

    1.JQuery this和$(this)的区别 相信很多刚接触JQuery的人,很多都会对$(this)和this的区别模糊不清,那么这两者有什么区别呢? 首先来看看JQuery中的  $()  这 ...

  4. POJ 2337 欧拉回路

    题意: 如果给出的单词能够首尾相接,请按字典序输出单词,中间要加'.' 否则输出三个"*". 思路: 欧拉回路 记得按字典序排序哦~ 加边的时候要倒着加.(邻接表遍历的时候是反着的 ...

  5. Super超级ERP系统---(1)总体设计

       1.概述 随着互联网的发展,尤其是电子商务的发展,信息化系统越来显得越重要.在互联网飞速发展的今天,各种网站,软件系统应用而生,特别是随着近几年电子商务的发展,很多企业慢慢开始做大,管理方面暴露 ...

  6. fullPage插件使用

    fullPage插件 fullPage.js 是一个基于 jQuery 的插件,它能够很方便.很轻松的制作出全屏网站,主要功能有: 支持鼠标滚动 支持前进后退和键盘控制 多个回调函数 支持手机.平板触 ...

  7. 第一天:java与mysql的连接工具类

    第一天:java与mysql的连接工具类 java最新版马上就要收费,这无疑是这门语言的衰败起始,毕竟在中国收费便难发展,例如c#,但是毕业设计已经选好用java来写一个动态网站, 这已经是一个事实, ...

  8. 第五周课后作业——适用于人工智能的visual studio 的创新分析

    个人觉得作业布置的(2)(3)(4)(5)的顺序并不合理,我将以(5)(2)(3)(4)的顺序开展我的分析. 创新的定义是做出一些改变或创造出新的东西,既是过程,也是结果.这是一个很泛的概念,所以去问 ...

  9. QS之vsim

    vsim - The vsim command invokes the VSIM simulator -L <library_name> … (optional) Specifies th ...

  10. 用JS解决Asp.net Mvc返回JsonResult中DateTime类型数据格式的问题

    当用ajax异步时,返回JsonResult格式的时候,发现当字段是dateTime类型时,返回的json格式既然是“/Date(1435542121135)/” 这样子的,当然这不是我们想要的格式. ...