【VB.NET 机房收费系统】——对SqlHelper别说“不”


 简介

SqlHelper是一个基于·NETFramework的数据库操作组件。组件中包含数据库操作方法。SqlHelper用于简化你重复

的去写那些数据库连接(SqlConnection),SqlCommand,SqlDataReader等等。SqlHelper封装过后通常是只需要给方法传入一些参数如数据库连接字符串,SQL参数等,就可以访问数据库了,很方便。

————官方正解

一长串的文字,我注意到的是“很方便”这三个字,那是有多方便呢???还不会用呢,也没发现又方便呀,单单就看SqlHelper这类块中的代码,就费劲的慌。于是乎,搁置在那,依旧用连接数据,访问数据,增删改查数据等不费脑但费时的工作。有时候,不是你不想偷懒,而是自己连偷懒都不会。

一个成功的编程师是不会将时间用在粘贴复制上的。

配置项

在应用SqlHelper前最好使用web.config配置连接字符串,<!--SqlServerHelper连接字符串设定-->

<addconnectionString="server=.;uid=sa;pwd=123456;database=yourdatabase"name="SqlServerHelper"/>至于如何配置文件,自行百度,有些事情不能一昧的索取,要自己去发现。

源码

编写SqlHelper调用代码,SqlHelper的书写风格很多,你可以选择自己的需求和爱好使用静态方式或对象方式。各种利弊。选择情况使用吧!

'//*******************************************************
'** 作者: 徐露
'** 创始时间:2014-8-23
'** 小组:
'** 修改时间:2014-9-
'** 描述:个人机房重构
'** 版本号:
'**********************************************************
Imports System.Data
Imports System.Data.SqlClient
Imports System.Configuration  '必须要在管理器中添加引用
Public Class SQLhelperDAL

    '定义变量
    '获得数据库的连接字符串
    Private ReadOnly strConnection As String = ConfigurationManager.AppSettings("ConnStr")
    '设置连接
    Dim conn As SqlConnection = New SqlConnection(strConnection)
    '定义cmd命令
    Dim cmd As New SqlCommand

    ''' <summary>
    ''' 执行增删改三个操作,(有参)返回值为Boolean类型,确认是否执行成功
    ''' </summary>  定义一个“ExecAddDelUpdate” 函数方法 能对数据库表中的数据进行增删改
    ''' <param name="cmdText">需要执行语句,一般是Sql语句,也有存储过程</param>
    ''' <param name="cmdType">判断Sql语句的类型,一般都不是存储过程</param>
    ''' <param name="paras">参数数组,无法确认有多少参数</param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Function ExecAddDelUpdate(ByVal cmdText As String, ByVal cmdType As CommandType, ByVal paras As SqlParameter()) As Integer
        '将传入的值,分别为cmd的属性赋值
        cmd.Parameters.AddRange(paras)   '将参数传入
        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                         '如果出错,返回0
        Finally
            Call CloseConn(conn)
            Call CloseCmd(cmd)
        End Try
    End Function
    ''' <summary>
    ''' 执行增删改三个操作,(无参)
    ''' </summary>
    ''' <param name="cmdText">需要执行语句,一般是Sql语句,也有存储过程</param>
    ''' <param name="cmdType">判断Sql语句的类型,一般都不是存储过程</param>
    ''' <returns>Interger,受影响的行数</returns>
    ''' <remarks>2013年2月2日8:19:59</remarks>
    Public Function ExecAddDelUpdateNo(ByVal cmdText As String, ByVal cmdType As CommandType) As Integer
        '为要执行的命令cmd赋值
        cmd.CommandText = cmdText       '先是查询的sql语句
        cmd.CommandType = cmdType       '设置Sql语句如何解释
        cmd.Connection = conn           '设置连接    

        '执行操作
        Try
            conn.Open()
            Return cmd.ExecuteNonQuery()
        Catch ex As Exception
            Return 0
        Finally
            Call CloseConn(conn)
            Call CloseCmd(cmd)
        End Try
    End Function

    ''' <summary>
    ''' 执行查询的操作,(有参),参数不限
    ''' </summary>
    ''' <param name="cmdText">需要执行语句,一般是Sql语句,也有存储过程</param>
    ''' <param name="cmdType">判断Sql语句的类型,一般都不是存储过程</param>
    ''' <param name="paras">传入的参数</param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Function ExecSelect(ByVal cmdText As String, ByVal cmdType As CommandType, ByVal paras As SqlParameter()) As DataTable

        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(Paras)  '参数添加
        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                            '最后一定要销毁cmd
            Call CloseCmd(cmd)
        End Try
        Return dt
    End Function

    ''' <summary>
    ''' 执行查询的操作,(无参)
    ''' </summary>
    ''' <param name="cmdText">需要执行语句,一般是Sql语句,也有存储过程</param>
    ''' <param name="cmdType">判断Sql语句的类型,一般都不是存储过程</param>
    ''' <returns>dataTable,查询到的表格</returns>
    ''' <remarks></remarks>
    Public Function ExecSelectNo(ByVal cmdText As String, ByVal cmdType As CommandType) As DataTable
        Dim sqlAdapter As SqlDataAdapter
        Dim ds As New DataSet
        '还是给cmd赋值
        cmd.CommandText = cmdText
        cmd.CommandType = cmdType
        cmd.Connection = conn
        sqlAdapter = New SqlDataAdapter(cmd)  '实例化adapter
        Try
            sqlAdapter.Fill(ds)           '用adapter将dataSet填充
            Return ds.Tables(0)             'datatable为dataSet的第一个表
        Catch ex As Exception
            Return Nothing
        Finally                            '最后一定要销毁cmd
            Call CloseCmd(cmd)
        End Try
    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

话说,有了源码怎么用呢,这是个问题。机房刚开始我就已经在D层加上SqlHelper类,对新事物总存在抵触的心理,不用它。敲了几个窗体后,渐渐发现每一次的访问数据,都是那几行代码,变来变去也就是对数据的增删改查,而且每次都要写。家中有宝,不去用亏大了。这我才硬着头皮去琢磨这SqlHelper怎么用。

  1. 观察代码____找不同

按定义的方法名来看,分为查询和增删改两类。查询时是返回给用户想要查看的信息,返回的           是DataTable类型;增删改归为改和更新,返回受影响的行数,更新成功就返回整数1(Integer型)。

      DataTable
是一个临时保存数据的网络虚拟表,可以被创建和访问,当SqlHelper查询后就要返回      到DataTable虚拟表中,判断它的第一行是否有数据来插到记录

※        Integer型,返回受影响的行数。在机房收费系统中,我们可以发现,当受影响的行数大于0说明查到相应的记录,如果为0说明没有查询到数据。同理,如果受影响的行数大于0说明增删改操作成功,为0则操作失败。于是乎,可以通过返回受影响的行数到B层进行逻辑判断,然后传到U层,这样层层递进,妙哉。

  1. 静心思考____明原理

在查询和增删改两大类中,又细分了有参数和无参数量两小类。当想要获取数据库的全部信息时,如正在值班教师日志查询时,即可无参查询信息,全部在DataGridView中显示。当想要获取部分信息时,即可用参数查询。

本人就 机房收费系统 登录为例。分别用SqlHelper和不用SqlHelper 中实现。

为了不破坏三层思想:各层之间传实体。本例中间获得的dt转为实体。细心的同学会发现,查询到的dt结果赋值给实体对象的属性,然后返回实体的过程,或许本例中的属性值少,还是可以一个一个的传递的,但是有多个,或者说是上百个的时候,那么还是一个一个的传递的么,显然是不行的,由此引出泛型集合。可以直接将dt转换为一个包含实体的泛型集合,然后每次返回的时候,将集合作为结果返回。

敬请期待我的下一篇博客:实体类返回泛型集合。

后续:不怕不知道,就怕不知道。。。。只要你想去学,就没有学不会。告别说“不”

时间: 2024-10-03 22:39:55

【VB.NET 机房收费系统】——对SqlHelper别说“不”的相关文章

vb.net机房收费系统——存储过程

一.使用背景 机房收费系统结账的时候,需求是当选择一个用户,同时显示该用注册.充值和退卡记录,这些数据来提供结账数据,而结账之后要同时更新卡.充值.退卡表三个表,如果直接写SQl语句的话会是很复杂的.而这些需求可以封装为一个存储过程,点击结账之后只需要传入参数执行存储过程即可. 二.存储过程简介 存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它.存储过程是数据库中的一个

【VB.NET 机房收费系统】___爱上视图(View)

简介 计算机数据库中的视图是一个虚拟表,其中内容有查询定义.同真实的表一样,视图包含一系列带有名称的列和行数据.但是,视图并不在数据库中与存储的数据值集形式存在,行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成. ----官方正解 神马虚拟表的,都是浮云--好用才是王道.先来说说如何创建视图. 新建视图 [VB.NET 机房收费系统]--学生查看余额 为例.本人不得不强调的一点是,在你所建立的学生表和卡表中表务必设置主键,不设置的后果就是 相信聪明的你们一定不会犯这么低级的错误

vb.net机房收费系统重构——总结(二)软件工程文档1

学软工时常常听到:这是我们迈向职业化的一步.软件工程文档在一个项目开发中必不可少,通过这次重构,将以前的软件工程,UML重新认识,梳理,实用了一遍有了更深刻的体会,我在机房重构中,一共编写了七个文档,分别是 1.项目开发计划 2.软件需求说明书 3.数据库设计说明书 4.概要设计说明书 5.详细设计说明书 6.机房收费系统测试计划 7.机房收费系统用户操作手册 在这里只讲一下项目开发文档中各种需要的图.表. (一)软件项目开发计划: 文档的目的不用说,在这里面最重要的两个内容:项目的人员分工,以

vb.net机房收费系统重构——配置文件

机房收费系统已经进行了一段时间,敲完三层,然后又推翻了敲写七层.每天拿出的时间不多,所以导致项目进行了很长时间.在完成过程中,最开始敲出一条线比较困难,各种查资料,调代码,庆幸的是代码中的难点和错误终于在努力下攻克了. 机房收费系统中,最开始时看了其他人的介绍,说什么配置文件,反射和SqlHelper.其实刚开始对这些相当模糊,配置文件和反射在设计模式中接触过,但并没有深入的理解,而且当时是C#,因此一开始转移到vb.net中有些吃力,发射也是如此.经过不断的查阅资料和实践,现在对这些总算有些全

vb.net机房收费系统报表设计

在vs2012中,基于vb.net环境开发了一个机房收费系统,在这个系统中用到了报表.什么是报表? 过去没有计算机的时候,我们算账,记录信息等都在纸上进行,就是列账单清单,通过账单,所需要的信息一目了 然. 在计算机的年代,取缔了手写+纸质账单,用软件来制作清单.这是我用Report.rdlc控件做的一个简单的报表. 设计 制作报表 (1)在UI层添加报表 (2)选择报表控件,并命名控件为weelyReport (3)右击,添加数据集 (4)新建数据源 (6)添加连接 (7)在经过几步操作就到了

小结:VB.NET机房收费系统个人版

经过几天的缝缝补补,自己的个人版终于OK了,!也许是因为有第一次的机房收费系统的经验,这次做,感觉非常亲切. 在业务逻辑方面,沿袭以前的逻辑,做了一点升级,但是改动不大. 在数据库方面,感觉自己从一个小菜鸟在成长.第一次做机房的时候,在数据库方面,只会"insert ,delete ,update, select",基本上是靠着四句话完成整个机房收费系统的.但是,这次在做的时候,用上了视图和存储过程和一些数据库中的小技巧.在表结构上也比以前简练了不少,靠着强大的D层的基础,使得上层的编

vb.net机房收费系统重构——存储过程的使用

在敲写七层登陆过程中,接触了存储过程的概念,但当时还没使用.在正式的重构过程中,一点点添加,将存储过程也添加到了重构中.才正式了解了存储过程. 首先 [存储过程的概念] 存储过程Procedure是一组为了完成特定功能的SQL语句集合,经编译后存储在数据库中,用户通过指定存储过程的名称并给出参数来执行. 存储过程中可以包含逻辑控制语句和数据操纵语句,它可以接受参数.输出参数.返回单个或多个结果集以及返回值. [存储过程的使用] 首先,打开数据库--存储过程 右键-新建存储过程 CREATE PR

VB.NET机房收费系统总结

总感觉这次机房收费系统很有份量,一直没有下手总结,从2014-7-27至2014-9-29,这中间有太多故事和成长.首先说一下两次机房收费系统的不同,它是我们从面向过程向面向对象的一个转变,在.NET平台下开发,采用三层思想,并添加了一些设计模式,然后说一下我的变化,不管从思想还是技术上绝对是一笔财富,经过这次机房收费系统,我更加坚信两句话:"出来混迟早都要还的""一切都会过去的". 这次个人重构:7.27-8.11(画图阶段,其中包括数据设计2天):8.12-9.

vb.net机房收费系统重构——总结(四)软件工程文档3

(四)概要设计说明书 数据库搭建完成后就要设计概要系统,首先第一必不可少的是系统模块图. 在这里,很多同学都把模块图理解成了包图,其实这两者有差异.以我们正在做的ITOO为例,分为基础部分,评教部分,考试部分等五个部分,这就是五个大的模块.每个模块再进行细分. 而在机房收费系统中,可以简单的分为三大模块,即一般用户,操作员,管理员.每种级别用户操作目的和职能不同,所有又可以细分模块. 系统总体设计的主要任务就是确定软件的总体结构,确定模块间传送的数据及控制关系,尽量的做到解耦. (五)详细设计说