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

近期在做收费系统时。须要和数据库进行频繁的联系。既然是反复的使用,就须要封装,这里使用到了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. putty配色方案【转】

    本文转载自:http://blog.csdn.net/hfut_jf/article/details/53636080 putty默认的配色方案简直毫无人道主义可言,所以找了个,好多了,转载自http ...

  2. nyoj--491--幸运三角形(dfs)

    幸运三角形 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 话说有这么一个图形,只有两种符号组成('+'或者'-'),图形的最上层有n个符号,往下个数依次减一,形成倒置的 ...

  3. TestNG环境搭建以及框架初识

    TestNG的英文为Test Next Generation, 听上去好像下一代测试框架已经无法正常命名了的样子,哈哈,言归正传,啥是TestNG呢,它是一套测试框架,在原来的Junit框架的思想基础 ...

  4. iOS数组越界

    数组越界就是假如你的下标总数现在为32个,然后你在下一秒又执行了一个方法要从50个数据里进行赋值啊筛选之类的,而你此时数组里的值为32个,50的数据还没有请求到,往往会出现数组越界的崩溃信息,大概是这 ...

  5. js判断浏览器是android还是ios还是微信浏览器

    第一种方法<script type="text/javascript"> //判断访问终端 var browser={ versions:function(){ var ...

  6. JS排序之冒泡排序

    冒泡排序的两种策略: <script>// 第一种思路:// 一个数组中的数据,拿第一个和剩下的依次进行对比,数值小的赋值给第一个,一轮比较过后,则数值小的放在最前边.// 第二轮比较,则 ...

  7. Android-crop:漂亮的图片裁切工具

    主要特点 Gradle构建和AAR 现代化的UI 向后兼容到SDK 10 配置简单 示例项目 使用 首先,在你的 manifest 文件中申明 CropImageActivity : <acti ...

  8. 转载:SQL Server中查询CPU占用高的SQL语句

    SQL Server中查询CPU占用高的SQL语句 SQL Server 表变量的用法 究竟什么是敏捷测试--朱少民

  9. swift的计算属性和懒加载

    计算属性每次都重新计算. 懒加载只计算一次. 可以借助backing store将计算属性转化为懒加载属性. 计算属性实质上退化为函数调用. 计算属性的标示是get.set.

  10. 转载:html特殊字符 编码css3 content:&amp;quot;我是特殊符号&amp;quot;

    项目中用到的一些特殊字符和图标 html代码 <div class="cross"></div> css代码 .cross{ width: 20px; he ...