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

近期在做收费系统时。须要和数据库进行频繁的联系。既然是反复的使用,就须要封装,这里使用到了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的更多相关文章

  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. SQL SERVER的浮点数类型及与C#的对应关系

    SQL SERVER: float 与 real 7位数或15位数.这里说的位数,不是指小数位,而是包括整数和小数在内的位数. float的位数是多少,要看float[(n)]里的n数值是多少. n ...

  2. bzoj3224: Tyvj 1728 普通平衡树(splay)

    3224: Tyvj 1728 普通平衡树 题目:传送门 题解: 啦啦啦啦又来敲个模版水经验啦~ 代码: #include<cstdio> #include<cstring> ...

  3. JavaScript:DOM对象

    ylbtech-JavaScript:DOM对象 1. HTML DOM Document 对象返回顶部 1. HTML DOM Document 对象 HTML DOM 节点 在 HTML DOM ...

  4. SpringAop中JoinPoint对象

    来自:http://blog.csdn.net/it_zouxiang/article/details/52576917 JoinPoint的用法 JoinPoint 对象 JoinPoint对象封装 ...

  5. 一篇个人感觉比较好的lua入门的文章

    原文转自www.cppprog.com,由三篇文章组成 Lua是一个嵌入式的脚本语言,它不仅可以单独使用还能与其它语言混合调用.Lua与其它脚本语言相比,其突出优势在于: 1.  可扩展性.Lua的扩 ...

  6. 修改Visual Studio2010的主题颜色

    第一步:打开工具->扩展管理器 第二步:搜素visual studio color theme editor 第三步:找到Visual Studio Color Theme Editor 第四步 ...

  7. linux下使用bcp备份sybase数据

    命令|数据库名|表名|导出到|文件名|格式|sybase服务名|数据库登录名 |字符集 bcp dbname..tablename out filename -n -Sgfdmhk -UISISMan ...

  8. WordPress浏览次数统计插件:WP-Postviews使用

    WP-Postviews使用 1.要让你的博客在页面上显示浏览次数,你需要修改你博客当前使用的主题,在主循环中插入以下代码: 1 <?php if(function_exists('the_vi ...

  9. sublime text 3 上安装xdebug

    安装完成之后启动xdebug,缺省设置下会显示warning等信息,很不方便. 可以参考 https://github.com/martomo/SublimeTextXdebug/blob/maste ...

  10. 图像的全局特征--LBP特征

    原文链接:http://blog.csdn.net/zouxy09/article/details/7929531#comments 这个特征或许对三维图像特征提取有很大作用.文章有修改,如有疑问,请 ...