数据操作的封装--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
        '使用Using关键字实例化连接字符串,给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 关键字实例化连接字符串
        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 [email protected] and [email protected]"
        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

这个模块时登录模块,使用用户名和密码作为参数,返回值为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,布布扣,bubuko.com

时间: 2024-12-19 21:08:12

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

JDBC通用的数据库数据操作[CRUD]封装

package com.lyang.dao; import java.lang.reflect.Field; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.util.ArrayList; import java.

玩转ASP.NET 5:数据操作封装(一)

1.数据操作封装 1.1概述 在习惯使用ADO.NET数据库访问与操作封装,通常写DataHelper/SQLHelper类.到如今ORM大行其道,我们该爱上存储库模式来封装操作.当然,为了顾及初学者,在封装方法时,还是教学方式,一步步地来,最终重构成通用可重用的代码.所以一开始先不用泛型及写一些扩展方法. 1.2新增目录 1.3代码 面向接口编程方式,先定义接口: using BlogASPNET5.Entity.Accounts; using System.Collections.Gener

Android适配器之DataModifyHelper数据操作类的封装

编写适配器代码时常常被以下几个问题所困扰: 1.业务层和适配器中对同一组数据进行维护,难以管理 2.在业务层针对数据进行修改后必须通知适配器更新,否则提示The content of the adapter has changed but ListView did not receive anotification 3.业务层修改数据时充斥大量的非空&数据标准化等冗余代码 针对前两个问题,可以将数据交由适配器去管理,业务层对数据的增删改查均通过适配器进行处理,这样仅需要维护好adapter中的数

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

前述: 对数据库操作的封装,相信网络上已经有一大堆,ORM框架,或者是.NET本身的EF,都很好的支持数据库操作.这篇文章是分享自己所思考的,对数据库操作的简单封装.我对于这篇文章,认为被浏览者所关注重点的是怎么分析设计数据库操作封装,代码是其次.而且,这是我第一篇文章,为了想好怎么实现花了些天,代码是博客发表时现写的.所以我想,使用可能还有bug,而且没有try catch异常的设计. 这个框架我理应做到对数据库无关,无论是哪个数据库都能够使用.不过,重点在于分析,而不是代码.所以,为了更好的

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

一.基础知识 主要类及成员(和数据库无关的)(1)类DataSet:数据集,对应着库,属性Tables表示所有的表(2)类DataTable:数据表,对应着表,属性Rows表示所有的行(3)类DataRow:行数据,一个行数组,就对应着一个实体对象         ->使用DataAdapter的Fill方法,可以将数据填充到DataSet或DataTable中 二.练习:完成学生表的crud (1)dataGridView的填充: using System; using System.Coll

PHP中对数据库操作的封装

在动态网面设计中很多都要涉及到对数据库的操作,但是有时跟据需要而改用其它后台数据库,就需要大量修改程序.这是一件枯燥.费时而且容易出错的功作.其实我们可以用PHP中的类来实现对数据库操作的封装,从而使写出的程序在很小的改动下就可以完成后台数据库的更改. <? class dbInterface{ var $dbID=1; //用于确定当前操作的数据库,当dbID为1代表MySql,当为 2代表 SQL Server,为3时为ODBC或其它. var $dbHost; //数据库所在主机域名 va

jQuery中对AJAX操作的封装函数

jQuery提供了6个简化AJAX操作的函数,每个都可以代替元素AJAX中的四步代码! (1)$('xxx').load()         jQuery对象函数 (2)$.get()                   jQuery全局函数 (3)$.post()                 jQuery全局函数 (4)$.getScript()          jQuery全局函数 (5)$.getJSON()           jQuery全局函数 (6)$.ajax()     

Cocos数据篇[3.4](2) ——Json数据操作

[唠叨] 在游戏中使用Json来储存数据,既方便读取,又方便管理. 比如CocosStudio 1.6之前版本导出的资源扩展名就是 .ExportJson 格式的. Cocos2d-x 3.x 加入了rapidjson库用于json解析.位于external/json下. 本节要介绍的就是:如何使用 rapidjson库 来操作处理json文件. [参考] http://www.w3school.com.cn/json/index.asp (W3School) http://cn.cocos2d

我的DbHelper数据操作类(转)

其实,微软的企业库中有一个非常不错的数据操作类了.但是,不少公司(起码我遇到的几个...),对一些"封装"了些什么的东西不太敢用,虽然我推荐过微软的企业库框架了...但是还是要"评估"...一评就是几个月...而且,一些公司有的根本就是裸ado.net开发,或者自己封装的数据库操作类非常别扭,很不好用.      这里我给大家共享一个我参照企业库中的数据操作组件编码风格写的数据库操作类,对使用它的程序员来说,编码是很舒服滴(起码我觉得很好撒).以下是代码,很简单的,