sql使用存储过程和交易

在过去的一年。学习数据库的时候学校有存储过程。永远只是知道一些理论,我不知道怎么用。时隔一年,最终找到怎样使用存储过程了。

在机房收费系统中。有些操作。须要多次运行sql语句,多次运行完毕才算是完毕这个事件流。

可是假设当中有一个环节出了错误,那么没出错误的那些操作是不是就多余了。

运行存储过程。就是运行多句SQl语句。而事务。是为了控制这些语句 要么都做,要么 都不做。

在机房收费系统中。运行sql语句的时候。

一般的sql语句用法:定义一个字符串,用于存放sql语句。之后指明commandtype=commandType.text  假设有參数的情况下,须要提供參数。

使用存储过程的方法:写好存储过程,在vs中直接调用。指明commandtype=CommandType.StoredProcedure   假设有參数的情况下,须要提供參数。使用存储过程,避免了在vs中写 字符串。

接下来看一个实例。题:设置基本数据,首先须要取消之前使用的基本数据,然后再插入新的基本数据。

首先。把使用的存储过程预先写入数据库。

Create procedure [dbo].[SetBasicData]
@rate char(16),@steptime char(16),@leasttime char(16),@mincash char(16),@cardtype char(16),@Heaf char(16)

as

begin tran
update T_Basic set cardtype='不使用' where [email protected]
insert into T_Basic values(@rate,@steptime,@leasttime,@mincash,@cardtype,@Heaf,default,default)
if	@@ROWCOUNT<>2    --检查以上两条sql语句是否正确运行
	rollback tran	--没有正确运行,回滚
else
commit tran		--正确运行,提交事务

写完之后。能够在以下的位置 找到写好的存储过程。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemM0NzQyMzU5MTg=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast">

在这里,就省略U层和B层了。

仅仅对照一下D层的代码就能够了。

1、没有使用存储过程的D层代码

''' <summary>
    ''' 插入新的基本数据
    ''' </summary>
    ''' <param name="basic">新的基本数据实体</param>
    ''' <param name="head">操作人的姓名</param>
    ''' <returns></returns>返回true表示插入成功,返回false表示失败
    ''' <remarks></remarks>
    Public Function SetBasicInfo(basic As Entity.BasicInfoEntity, head As String) As Boolean Implements IDAL.IBasic.SetBasicInfo
        Dim strSQL As String
        strSQL = "Update BasicData_Info set status='不使用' where [email protected] Insert into BasicData_Info(Rate,stepTime,leasttime,preparetime,mincash,head,status) values(@Rate,@stepTime,@leastTime,@prepareTime,@minCash,@head,@status)"

        Dim helper As New SqlHelper
        Dim sqlparameter As SqlParameter() = {New SqlParameter("@Rate", basic.Rate),
                                             New SqlParameter("@stepTime", basic.StepTime),
                                             New SqlParameter("@leastTime", basic.LeastTime),
                                             New SqlParameter("@minCash", basic.MinCash),
                                             New SqlParameter("@head", head),
                                              New SqlParameter("@status", basic.Status)}
        Dim flag As Boolean
        flag = helper.UpdDelAlter(strSQL, CommandType.Text, sqlparameter)

        Return flag
    End Function

2、使用存储过程的D层代码

''' <summary>
    ''' 设置基本数据
    ''' </summary>
    ''' <param name="basic">基本数据实体</param>
    ''' <returns></returns>返回true表示插入成功,返回false表示失败
    ''' <remarks></remarks>
    Public Function SetBasicData(basic As Entity.BasicEntity) As Boolean Implements IDAL.IBasic.SetBasicData
        Dim strSQL As String = "SetBasicData"      '存储过程名
        Dim sqlparams As SqlParameter() = {New SqlParameter("@rate", basic.Rate),
                                           New SqlParameter("@steptime", basic.StepTime),
                                           New SqlParameter("@leasttime", basic.LeastTime),
                                           New SqlParameter("@mincash", basic.MinCash),
                                           New SqlParameter("@cardtype", basic.CardType),
                                           New SqlParameter("@Heaf", basic.Heaf)}   '传入參数

        Dim helper As New SqlHelper
        Dim flag As Boolean
        flag = helper.UpdDelAlter(strSQL, CommandType.StoredProcedure, sqlparams)

        Return flag
    End Function

对照上面的两种方法。

第一种方法:假设插入的基本数据设定有错,那么运行该操作之后,该系统中基本数据就被改动为‘不使用’的状态。出现错误。

另外一种方法,省去了写sql语句的麻烦。并且 假设数据库有变动,不须要改动代码。能够直接在sql server中 改动存储过程,也方便调试。

总结:使用存储过成能够提高数据的运行速度。当对数据库进行复杂操作时(如对多个表进行Update,Insert,Query,Delete时),可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。能够极大的提高数据库的使用效率,降低程序的运行时间,这一点在较大数据量的数据库的操作中是很重要的。在代码上看。SQL语句和程序代码语句的分离。能够提高程序代码的可读性

假设有更加上优化方法。欢迎指出!

版权声明:本文博客原创文章。博客,未经同意,不得转载。

时间: 2024-12-14 16:38:32

sql使用存储过程和交易的相关文章

SQL Server存储过程的初步认知

什么是存储过程? 存储过程就是作为可执行对象存放在数据库中的一个或多个SQL命令.实际上存储过程就是能完成一定操作的一组SQL语句. 为什么要用存储过程? 1.  存储过程只在创造时候编译,以后每次执行存储过程都不需要再重新的编译,而一般的SQL语句每执行一次就需要编译一次,所以使用存储过程可提高数据库执行速度. 2.  当对数据库进行复杂操作时,可将此复杂操作用存储过程封装起来与数据库提供的事物处理结合在一起. 3.  存储过程可以重复的使用,降低开发人员的工作量,提高工作效率. 4.  安全

Sql Server 存储过程中查询数据无法使用 Union(All)

原文:Sql Server 存储过程中查询数据无法使用 Union(All) 微软Sql Server数据库中,书写存储过程时,关于查询数据,无法使用Union(All)关联多个查询. 1.先看一段正常的SQL语句,使用了Union(All)查询: SELECT ci.CustId --客户编号 , ci.CustNam --客户名称 , ci.ContactBy --联系人 , ci.Conacts --联系电话 , ci.Addr -- 联系地址 , ci.Notes --备注信息 , ai

SQL Server 存储过程具体解释

SQL Server 存储过程具体解释 存储过程的优缺点 ◆长处: 运行速度更快. 存储过程仅仅在创造时进行编译,而一般SQL语句每运行一次就编译一次,所以使用存储过程运行速度更快. 存储过程用于处理复杂的操作时,程序的可读性更强.网络的负担更小. 使用存储过程封装事务性能更佳. 能有效的放注入,安全性更好. 可维护性高.在一些业务规则发生变化时.有时仅仅需调整存储过程就可以.而不用修改和重编辑程序. 更好的代码重用. ◆ 缺点: 存储过程将给server带来额外的压力. 存储过程多多时维护比較

[转]关于SQL分页存储过程的分析

[转]关于SQL分页存储过程的分析 建立一个 Web 应用,分页浏览功能必不可少.这个问题是数据库处理中十分常见的问题.经典的数据分页方法是:ADO 纪录集分页法,也就是利用ADO自带的分页功能(利用游标)来实现分页.但这种分页方法仅适用于较小数据量的情形,因为游标本身有缺点:游标是存放在内存中,很费内存.游标一建立,就将相关的记录锁住,直到取消游标.游标提供了对特定集合中逐行扫描的手段,一般使用游标来逐行遍历数据,根据取出数据条件的不同进行不同的操作.而对于多表和大表中定义的游标(大的数据集合

SQL数据库&mdash;&mdash;存储过程

SQL数据库--存储过程 语法格式: use 数据库名 在存储过程第一行就要首先声明所在数据库 go create(alter) proc 存储过程名 形参(@-), - as begin 执行体 (return) end go 注意:建立一个存储过程后,修改的话应该把create 改为alter. 执行体内的语法: 1.定义变量:declare 变量名(@-) 数据类型 2.赋值语法:set/select 变量名=表达式 3.if语句格式: if- begin - end else begin

真正通用的SQL分页存储过程

关于SQL分页的问题,网上找到的一些SQL其实不能真正做到通用,他们主要是以自增长ID做为前提的.但在实际使用中,很多表不是自增长的,而且主键也不止一个字段,其实我们稍做改进就可以达到通用.这里还增加了索引,以方便大数据量的使用(代码中是先抓到临时表的,从性能上说如果采用自增长式的ID表,当然可以不使用临时表以达到性能的提升).以下代码的SP是经过我们项目使用通过的.因朋友问及此问题,我就放在这里供大家分享,如各位大侠有更好的方法,也请告诉我.在这里先感谢各位了. 1 CREATE PROCED

完整SQL分页存储过程(支持多表联接)

http://www.cnblogs.com/andiki/archive/2009/03/24/1420289.html Code/********************************************************* * 作 用:数据分页(完整SQL分页存储过程(支持多表联接))* 作 者:齐李平* 创建日期:2009-03-23* 使用说明: 1.单表调用方法:EXEC proc_DataPagination @tblName = 'ipa',@fldName

Sql server存储过程中常见游标循环用法

原文:Sql server存储过程中常见游标循环用法 用游标,和WHILE可以遍历您的查询中的每一条记录并将要求的字段传给变量进行相应的处理 DECLARE @A1 VARCHAR(10), @A2 VARCHAR(10), @A3 INT DECLARE YOUCURNAME CURSOR FOR SELECT A1,A2,A3 FROM YOUTABLENAME OPEN YOUCURNAME fetch next from youcurname into @a1,@a2,@a3 while

SQL Server 存储过程(转载)

SQL Server 存储过程 Transact-SQL中的存储过程,非常类似于Java语言中的方法,它可以重复调用.当存储过程执行一次后,可以将语句缓存中,这样下次执行的时候直接使用缓存中的语句.这样就可以提高存储过程的性能. Ø 存储过程的概念 存储过程Procedure是一组为了完成特定功能的SQL语句集合,经编译后存储在数据库中,用户通过指定存储过程的名称并给出参数来执行. 存储过程中可以包含逻辑控制语句和数据操纵语句,它可以接受参数.输出参数.返回单个或多个结果集以及返回值. 由于存储