探索--SQL存储过程(一)

         在之前学SQL Server的时候学到了存储过程,当时只知道存储过程是什么,但是没有用过,从12年的8月份开始到现在,经过了很久的时间才对存储过程有了一点自己的理解,下面分享一下:

        首先,要想什么是存储过程?存储过程简单来说就是为以后的使用而保存的一条或多条SQL语句的集合,可以将它简单的想做批文件(但是比批文件强大的多)

         然后,要想为什么要使用存储过程?就是使用存储过程之后有什么优点?第一:它把处理封装在容易使用的单元中,能简化复杂的操作;第二:因为少了重复的复杂操作,保证了数据的一致性,防止错误.第三:因为存储过程是封装的处理操作,如果表名或列名,业务逻辑变化了,那么只需要更改存储过程的代码,使用它的人员不需要改变其他的代码;第四:因为存储过程通常以编译过的形式存储,所以DBMS为处理命令所做的工作较少,因此提高了性能;概括来说:简单、安全、高性能。

        我们举个我们熟悉的机房收费系统中,插入上机记录的存储过程简单的小例子,体会一下存储过程的使用,如下:

        先在DBMS中创建存储过程,我们用的Microsoft SQL Server,代码如下:

CREATE PROCEDURE PROC_InsertUpRecord @cardno INTEGER,@name varchar(50),@room varchar(50),@comment varchar(50)
AS
INSERT INTO T_UpRecord(CardNo ,Name ,[UpDate] ,UpTime  ,Room ,Comment )
VALUES(@cardno ,@name,CONVERT(varchar(100), GETDATE (), 23),GETDATE (),@room ,@comment )


 

                

以上代码是写在SQL Server中的,那么我们写好了存储过程,如何在VS中调用呢?我们来实践一下,因为我们需要的参数都是从界面层传回来的,B层写的是逻辑,D层是数据层,我们把代码写在了D层:

'*********************************************   
'说明:此函数用来向上机表中插入记录
'创建日期:2012-12-30
 '版本:1.0
 '********************************************
    Public Sub InsertUpRecord(mUpRecord As Model.UpRecord, mStuInfo As Model.StuInfo)
          '传参
       Dim params() As SqlParameter = {New SqlParameter("@cardno", mStuInfo.CardNo), New SqlParameter("@name", mStuInfo.Name), New SqlParameter("@room", mUpRecord.Room), New SqlParameter("@comment", mUpRecord.Comment)}


            '调用Update方法执行
        Call dExecute.Update("PROC_InsertUpRecord", params)
    End Sub

 

        因为Update方法很常用所以把它抽出来,我们看Update方法:

    '*********************************************
    '作者:***
    '说明:此函数用来修改数据库表的选定记录
    '创建日期:2012-12-23
    '版本:1.0
    '********************************************
    Public Sub Update(strProName As String, params() As SqlParameter)
        '连接数据库               
        Dim cn As New SqlConnection
        cn.ConnectionString = "Server=.;DataBase=CRCS;UID=sa;pwd=123456"        
        cn.Open()
        '传递参数并执行
        Dim cmd As New SqlCommand
        cmd.Connection = cn
        cmd.CommandText = strProName
        cmd.CommandType = CommandType.StoredProcedure
        cmd.Parameters.AddRange(params)
        cmd.ExecuteNonQuery()
        cn.Close()
    End Sub

      

             update方法其实就是连接数据库,并执行操作的一个方法。

            下面想一想,如果我们不用存储过程,代码应该怎么写?

 

    '*********************************************
    '作者:***                                                                            '说明:此函数用来向上机表中插入记录
    '创建日期:2012-12-30
    '版本:1.0
    '********************************************
    Public Function InsertUpRecord(mUpRecord As Model.UpRecord, mStuInfo As Model.StuInfo)
        '定义SQL字符串
        Dim strSQL As String
        strSQL = "insert into T_UpRecord values(" & " '" & mStuInfo.CardNo & "'" & "," & "'" & mStuInfo.Name & "'" & "," & "'" & mUpRecord.Update & "'" & "," & "'" & mUpRecord.UpTime & "'" & "," & "null" & "," & "null" & "," & "null" & "," & "null" & "," & "'" & "正在上机" & "'" & ")"   
        '调用Update执行操作     
        Call Update(strSQL)
    End Function

            比较一下两种代码,体会一下上面所说的存储过程的优点。现在是小系统感觉可能没那么明显,但是如果是大系统呢?不用存储过程的话,我们需要写N多条SQL语句,每次用的时候都要执行,那么可想而知,效率不高,而且直接输入字符串的话,一些符号经常容易出错,比如单引号等;但存储过程是以编译过的形式存储,所以DBMS为处理命令所做的工作较少,效率大大的提高,并且可以减少出错的几率;如果表中字段的名称更改了,不用存储过程的话需要改VS中的代码,不容易修改,但是用存储过程的话,只需要修改存储过程的代码就可以搞定了。

        如此,我们实现了存储过程在vs中最基础的调用。关于存储过程,这只是冰山一角,存储过程的知识还有很多,正在一步步探索前进的道路!


 


     


 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 13
    评论
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值