设为首页 加入收藏

TOP

机房收费系统(VB.NET)――存储过程实战(二)
2014-11-24 07:55:27 来源: 作者: 【 】 浏览:4
Tags:机房 收费系统 VB.NET 存储 过程 实战
ardNumber", enCard.CardNumber), New SqlParameter("@balance", enCard.Balance), New SqlParameter("@type ", enCard.CardType), New SqlParameter("@status", enCard.Status), New SqlParameter("@isChecked", enCard.IsChecked), New SqlParameter("@stuNumber", enStudent.StuNumber), New SqlParameter("@stuName", enStudent.StuName), New SqlParameter("@stuSex", enStudent.StuSex), New SqlParameter("@stuMajor", enStudent.StuMajor), New SqlParameter("@stuGrade", enStudent.StuGrade), New SqlParameter("@stuClass", enStudent.StuClass), New SqlParameter("@comment", enStudent.StuComment), New SqlParameter("@userID", userID)} '判断是否有查询结果 If sqlHelper.ExecuteNonQuery(cmdText, cmdType, parameters) Then Return True Else Return False End If End Function End Class SqlHelper代码:
Public Class SqlHelper
    '从配置文件中获取连接字符串的值
    Dim strConnection As String = ConfigurationSettings.AppSettings("strConnection")
    '创建数据库连接对象conn
    Dim conn As SqlConnection
    '创建数据库操作类cmd
    Dim cmd As New SqlCommand

    ''' 
    ''' 构造函数,实例化类时就初始化数据库连接对象
    ''' 
    ''' 
    Public Sub New()
        conn = New SqlConnection(strConnection)
    End Sub

    ''' 
    ''' 关闭释放SqlCommand对象
    ''' 
    ''' 需要关闭的SqlCommand对象
    ''' cmd.Dispose()直接释放command资源,不知这么做对系统性能怎么样,先这么着,以后再继续优化
    Public Sub CloseCommand(ByVal cmd As SqlCommand)
        If Not IsNothing(cmd) Then
            cmd.Dispose()
            cmd = Nothing
        End If
    End Sub

    ''' 
    ''' 关闭数据库连接
    ''' 
    ''' 需要关闭的SqlConnection对象
    ''' 关闭数据库连接,但并没有释放,而是存储在连接池中,需要的时候还可以通过Open()方法打开连接
    Public Sub CloseConnection(ByVal conn As SqlConnection)
        If Not IsNothing(conn) Then
            conn.Close()
        End If
    End Sub

    ''' 
    ''' 有参数的 增 删 改 操作
    ''' 
    ''' 需要执行的SQL命令
    ''' 所执行命令的,一般是sql语句、存储过程或表
    ''' 参数数组
    ''' 返回受影响的行数 类型为整型
    ''' 
    Public Function ExecuteNonQuery(ByVal cmdText As String, ByVal cmdType As String, ByVal sqlParameters As SqlParameter()) As Integer

       Try
           conn.Open()                                 '打开数据库连接
           cmd.CommandText = cmdText                   '设置查询语句
           cmd.CommandType = cmdType                   '设置一个值,解释cmdType(如果值为StoredProcedure时,调用的是存储过程)
           cmd.Connection = conn                       '设置连接
           cmd.Parameters.AddRange(sqlParameters)      '传入参数
    
           Dim affectedRows As Integer
           affectedRows = cmd.ExecuteNonQuery
           Return affectedRows                         '返回执行所受影响行数
        Catch ex As Exception
           MsgBox(ex.Message, MsgBoxStyle.OkOnly, "温馨提示")
           Return 0                                    '如果出错,则返回0
        Finally 
           cmd.Parameters.Clear()                      '清楚参数
           Call CloseCommand(cmd)                      '关闭并释放Command
           Call CloseConnection(conn)                  '关闭连接conn
        End Try

    End Function   
End Class

为什么要使用存储过程

注册学生卡号在这个系统中不算个大模块,但这个小小的需求,需要与数据库中三个表的数据打交道,而在以往的操作,竟然连了三次数据库,执行了三次SQL语句。

这样频繁地打开与关闭与数据库的连接,需要消耗大量系统资源,降低执行速度。这时就需要考虑用存储过程来代替执行如此之多的SQL语句。

1、一般SQL语句每执行一次就需要编译一次,而存储过程只是在创造时进行编译,以后每次执行都不需要再进行编译。

2、存储过程就是相当于把多个需要执行的SQL语句集合起来,变成一条SQL语句,当然就只需连接和执行一次就可以得到结果。

3、安全性高。可以指定存储过程的使用权,防止SQL注入。

4、系统升级、维护比较方便。

总结:

★ 当涉及到多个SQL语句执行,需要多次连接数据库,或者需要对多张表进行处理时,可以将这些操作封装在一起,即创建存储过程,以后每次需要的时候直接调用执行,即可执行所有的操作,避免了多次打开、关闭数据库连接。

★ 当涉及到比较复杂的需求时(比如机房收费系统中的下机结算消费金额就可以采用存储过程),比如排序、计算等等,可以把数据直接传到存储过程,一系列操作在数据库服务器里进行,减小了客户端与服务器之间的数据流量,同时还保证了系统的安全性。

到了这里大家脑子里可能会有个问题:既然让一个存储过程执行多个任务,那么万一在执行的过程中,这些任务中的一个或者几个任务没有完成,该如何是好?这时事务就派上用场了…快去实践吧…

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇检查行锁等待问题的脚本(单机和r.. 下一篇Hive的日期函数

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Python爬虫教程(从 (2025-12-26 16:49:14)
·【全269集】B站最详 (2025-12-26 16:49:11)
·Python爬虫详解:原 (2025-12-26 16:49:09)
·Spring Boot Java: (2025-12-26 16:20:19)
·Spring BootでHello (2025-12-26 16:20:15)