数据操作的封装--sqlhelper
为了提高软件的灵活性和可维护性,软件的代码须要科学的管理。我们引入了架构这个词。设计模式提醒我们,软件中反复性的代码须要封装起来。
近期在做收费系统时。须要和数据库进行频繁的联系。既然是反复的使用,就须要封装,这里使用到了sql
helper 。
先来看看百度对sqohelper的解释:一个基于.NETFframework的数据库操作组件。尽管不知道组件的详细含义。还是能够猜出来它就是D层中对数据库操作进行封装的工具。
数据库的操作,不外乎四种模式,增、删、改、查,依据返回值来区分,能够分为有返回值和无返回值两大类,增、删、改操作是不须要返回值的,查询操作返回值就是查询结果。这些操作各自都有两种操作方式,有參数和无參数的。无參数的就是对整张表的操作,有參数的是对个别字段的操作。
sql helper用到的方法或函数或參数:
ExecuteNonQuery :此方法用于运行没有返回值的命令(有參数或者没有參数)。它通经常使用于运行数据库(增、删、改)命令,也可用于返回存储过程的输出參数。
Parameters:此參数用于运行有參数的查询或更新(增、删、改)操作。
sql Command: 此函数用于封装数据库操作命令。
CommandType:用于设置数据库连接类型
CommandText:用于设置数据库连接语句。
看一下sql helper类代码:
- Imports System.Data.SqlClient
- Imports System.Configuration
- Imports System.Data
- '须要在管理器中加入引用
- Public Class sqlHelper
- '定义变量
- Dim ConnString As String = "Server=.;Database=Charge;User=sa;PassWord=123456"
- '获得数据库连接字符串
- Private ReadOnly strConnection As String = ConfigurationSettings.AppSettings("ConnString")
- Dim conn As SqlConnection = New SqlConnection(strConnection)
- '定义CMD命令
- Dim cmd As New SqlCommand
- ''' <summary>
- ''' 运行查询操作(有參数),參数没有限制
- ''' </summary>
- ''' <param name="cmdText">须要运行的语句,通常是SQL语句。也可能是存储过程</param>
- ''' <param name="cmdType">推断SQL语句的类型。一般不是存储过程</param>
- ''' <param name="sqlparameters">传入參数</param>
- ''' <returns></returns>
- ''' <remarks></remarks>
- Public Function ParaSelect(ByVal cmdText As String, ByVal cmdType As CommandType, ByVal sqlparameters As SqlParameter()) As DataTable
- '
- Using conn As New SqlConnection(ConnString) '
- 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(sqlparameters) '加入參数
- sqlAdapter = New SqlDataAdapter(cmd) '实例化adapter
- Try
- sqlAdapter.Fill(ds) '用adapter将dataSet填充
- dt = ds.Tables(0) 'datatable为dataSet的第一个表
- cmd.Parameters.Clear() '清除參数
- Catch ex As Exception '抛出异常
- MsgBox("查询失败", CType(vbOKOnly + MsgBoxStyle.Exclamation, MsgBoxStyle), "警告")
- Finally
- Call CloseCmd(cmd) '销毁cmd命令
- End Try
- Return dt
- End Using
- End Function
- ''' <summary>
- ''' 运行查询操作(无參数)
- ''' </summary>
- ''' <param name="cmdText">同上</param>
- ''' <param name="cmdType">同上</param>
- ''' <returns>dataTable查询到表格</returns>
- ''' <remarks></remarks>
- Public Function NonParaSelect(cmdText As String, cmdType As CommandType) As DataTable
- Using conn As New SqlConnection(ConnString)
- Dim sqlAdapter As SqlDataAdapter
- Dim ds As New DataSet
- cmd.CommandText = cmdText
- cmd.CommandType = cmdType
- cmd.Connection = conn
- sqlAdapter = New SqlDataAdapter(cmd)
- Try
- sqlAdapter.Fill(ds)
- Return ds.Tables(0)
- '抛出异常。无返回值
- Catch ex As Exception
- Return Nothing
- Finally
- Call CloseCmd(cmd) '关闭CMD命令
- End Try
- End Using
- End Function
- ''' <summary>
- ''' 运行增、删、改操作(有參数)。使用Integer作为返回值类型。0操作失败。1操作成功
- ''' </summary>
- ''' <param name="cmdText">须要运行的语句</param>
- ''' <param name="cmdType">推断SQL语句类型</param>
- ''' <param name="sqlParameter">參数数组,參数没有限制</param>
- ''' <returns></returns>
- ''' <remarks></remarks>
- Public Function ParaDataManager(ByVal cmdText As String, ByVal cmdType As CommandType, ByVal sqlParameter As SqlParameter()) As Integer
- '使用Usingkeyword实例化连接字符串。给cmd赋值
- Using conn As New SqlConnection(ConnString)
- cmd.Parameters.AddRange(sqlParameter)
- cmd.CommandType = cmdType '设置一个值,解释cmdText
- cmd.Connection = conn '设置连接,全局变量
- cmd.CommandText = cmdText '设置查询语句
- Try
- conn.Open() '打开连接
- Return cmd.ExecuteNonQuery '运行操作
- cmd.Parameters.Clear() '清除參数
- Catch ex As Exception '抛出异常
- Return 0
- Finally
- Call CloseConn(conn)
- Call CloseCmd(cmd)
- End Try
- End Using
- End Function
- ''' <summary>
- ''' 运行增、删、改操作(无參数)
- ''' </summary>
- ''' <param name="cmdType">同上</param>
- ''' <param name="cmdText">同上</param>
- ''' <returns></returns>
- ''' <remarks></remarks>
- Public Function NonParaDataManager(ByVal cmdType As CommandType, ByVal cmdText As String) As Integer
- '使用Using keyword实例化连接字符串
- Using conn As New SqlConnection(ConnString)
- cmd.CommandText = cmdText '设置查询语句
- cmd.CommandType = cmdType '设置SQL语句类型
- cmd.Connection = conn '设置连接
- Try '运行操作
- conn.Open()
- Return cmd.ExecuteNonQuery '返回值
- Catch ex As Exception
- Return 0 '抛出异常。返回0表示操作失败
- Finally
- Call CloseCmd(cmd)
- Call CloseConn(conn)
- End Try
- End Using
- End Function
- ''' <summary>
- ''' 关闭连接
- ''' </summary>
- ''' <param name="conn">须要关闭的连接 </param>
- ''' <remarks></remarks>
- Public Sub CloseConn(ByVal conn As SqlConnection)
- If (conn.State <> ConnectionState.Closed) Then '推断源对象是否关闭
- conn.Close() '关闭连接
- conn = Nothing '不指向原对象
- End If
- End Sub
- ''' <summary>
- ''' 关闭命令
- ''' </summary>
- ''' <param name="cmd">须要关闭的命令</param>
- ''' <remarks></remarks>
- Public Sub CloseCmd(ByVal cmd As SqlCommand)
- If Not IsNothing(cmd) Then '假设CMD命令存在
- cmd.Dispose() '销毁命令
- cmd = Nothing
- End If
- End Sub
- End Class
sqlhelper类代码分为三部分。第一部分为数据库连接设置部分;第二部分是四个数据库操作,从上到下依次为:有參数的查询、无參数的查询、有參数的更新、无參数的更新;第三部分为关闭连接和销毁命令部分。每一次调用这个类,在结尾都须要关闭命令和连接。查询操作须要返回查询结果,没有返回值得须要返回Integer类型的0或1来推断是否操作成功。
看看D层代码时怎样调用sql helper的:
查询操作(有參数):
- Imports System.Data.SqlClient
- Imports System.Data
- Imports Charge.DAL.sqlHelper
- Public Class Login
- Public user1 As Charge.Model.User
- Dim strSQL As String
- Dim help As New sqlHelper
- Public Function SelectUsers(user1 As Charge.Model.User) As DataTable
- strSQL = "select * from User_Info where UserName=@UserName and PassWord=@PassWord"
- Dim sqlPara As SqlParameter() = {
- New SqlParameter("@UserName", user1.UserName),
- New SqlParameter("@PassWord", user1.PassWord)
- }
- Return help.ParaSelect(strSQL, CommandType.Text, sqlPara)
- End Function
- End Class
这个模块时登录模块,使用username和password作为參数,返回值为DataTable表格。
更新(加入)操作(有參数):
- Imports System.Data.SqlClient
- Imports Charge.DAL.sqlHelper
- Imports System.Data
- Public Class AddUsers
- Dim strSQL As String
- Dim help As New sqlHelper
- Public Function AddUser(user3 As Charge.Model.User) As Integer
- strSQL = "insert into [User_Info] (UserName,PassWord,Level,RealName)values(@UserName,@PassWord,@Level,@RealName) "
- Dim sqlPara As SqlParameter() = {
- New SqlParameter("@UserName", user3.UserName),
- New SqlParameter("@PassWord", user3.PassWord),
- New SqlParameter("@Level", user3.Level),
- New SqlParameter("@RealName", user3.RealName)
- }
- Return help.ParaDataManager(strSQL, CommandType.Text, sqlPara)
- End Function
- End Class
这个模块时插入模块。使用了四个參数。返回值类型为Integer。
这里没实用到设计模式,仅仅是进行了封装,没实用到泛化和继承。随着进一步的学习,会有更好的办法来解决反复的问题。
数据操作的封装--sqlhelper的更多相关文章
- 基于 Aspose.Cells与XML导入excel 数据----操作类封装
前言 导入excel数据, 在每个项目中基本上都会遇到,第三方插件或者基于微软office,用的最多的就是npoi,aspose.cells和c#基于office这三种方式,其中各有各的优缺点,在这也 ...
- StackExchange.Redis帮助类解决方案RedisRepository封装(字符串类型数据操作)
本文版权归博客园和作者本人共同所有,转载和爬虫请注明原文链接 http://www.cnblogs.com/tdws/tag/NoSql/ 目录 一.基础配置封装 二.String字符串类型数据操作封 ...
- 手把手封装数据层之DataUtil数据库操作的封装
上一篇我们写完了数据库连接的封装 没有看的请移步上一篇关于数据库连接的内容 这次我们讲数据库操作的封装.数据库的操作就是增删改查:心再大一点就可以直接分为查询和其他. 因为查询是有返回对象的,而其他都 ...
- Java中使用自定义类封装数组,添加类方法实现数据操作
1.具体见注释 2.后续或有更新 public class MyArray { private long[] array; private int cnt; // 自定义数组类的元素个数 /** 使用 ...
- XML序列化 判断是否是手机 字符操作普通帮助类 验证数据帮助类 IO帮助类 c# Lambda操作类封装 C# -- 使用反射(Reflect)获取dll文件中的类型并调用方法 C# -- 文件的压缩与解压(GZipStream)
XML序列化 #region 序列化 /// <summary> /// XML序列化 /// </summary> /// <param name="ob ...
- C# .NET更智能的数据库操作的封装
前述: 对数据库操作的封装,相信网络上已经有一大堆,ORM框架,或者是.NET本身的EF,都很好的支持数据库操作.这篇文章是分享自己所思考的,对数据库操作的简单封装.我对于这篇文章,认为被浏览者所关注 ...
- ADO.NET复习总结(6)-断开式数据操作
一.基础知识 主要类及成员(和数据库无关的)(1)类DataSet:数据集,对应着库,属性Tables表示所有的表(2)类DataTable:数据表,对应着表,属性Rows表示所有的行(3)类Data ...
- 【转载】微软官方提供的Sqlserver数据库操作帮助类SQLHelper类
在.NET平台中,C#语言一般使用ADO.NET组件来操作Sqlserver数据库,通过ADO.NET组件可以实现连接数据库.查询数据集.执行SQL语句以及关闭数据库连接等操作,为此网上有很多开发者自 ...
- 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 ...
随机推荐
- 使用filezella服务器安装ftp
使用FileZilla配置FTP站点,可参考以下步骤: 1.打开Filezilla Server服务端: 点击[Edit]->[Users],或者点击如下图标新增用户. 2.添加FTP帐号后,设 ...
- wamp服务器下安装mantis
什么是Mantis Mantis是一个BUG管理系统.主要特点如下: 1.用php写的系统,安装方便,不用像 bugzilla 那样安装那么多perl支持: 2.系统相对简单轻磅,使用简单: 3.出色 ...
- jquery的this和$(this)
1.JQuery this和$(this)的区别 相信很多刚接触JQuery的人,很多都会对$(this)和this的区别模糊不清,那么这两者有什么区别呢? 首先来看看JQuery中的 $() 这 ...
- POJ 2337 欧拉回路
题意: 如果给出的单词能够首尾相接,请按字典序输出单词,中间要加'.' 否则输出三个"*". 思路: 欧拉回路 记得按字典序排序哦~ 加边的时候要倒着加.(邻接表遍历的时候是反着的 ...
- Super超级ERP系统---(1)总体设计
1.概述 随着互联网的发展,尤其是电子商务的发展,信息化系统越来显得越重要.在互联网飞速发展的今天,各种网站,软件系统应用而生,特别是随着近几年电子商务的发展,很多企业慢慢开始做大,管理方面暴露 ...
- fullPage插件使用
fullPage插件 fullPage.js 是一个基于 jQuery 的插件,它能够很方便.很轻松的制作出全屏网站,主要功能有: 支持鼠标滚动 支持前进后退和键盘控制 多个回调函数 支持手机.平板触 ...
- 第一天:java与mysql的连接工具类
第一天:java与mysql的连接工具类 java最新版马上就要收费,这无疑是这门语言的衰败起始,毕竟在中国收费便难发展,例如c#,但是毕业设计已经选好用java来写一个动态网站, 这已经是一个事实, ...
- 第五周课后作业——适用于人工智能的visual studio 的创新分析
个人觉得作业布置的(2)(3)(4)(5)的顺序并不合理,我将以(5)(2)(3)(4)的顺序开展我的分析. 创新的定义是做出一些改变或创造出新的东西,既是过程,也是结果.这是一个很泛的概念,所以去问 ...
- QS之vsim
vsim - The vsim command invokes the VSIM simulator -L <library_name> … (optional) Specifies th ...
- 用JS解决Asp.net Mvc返回JsonResult中DateTime类型数据格式的问题
当用ajax异步时,返回JsonResult格式的时候,发现当字段是dateTime类型时,返回的json格式既然是“/Date(1435542121135)/” 这样子的,当然这不是我们想要的格式. ...