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)
commit tran

写完之后,可以在下面的位置 找到写好的存储过程。

在这里,就省略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语句和程序代码语句的分离,可以提高程序代码的可读性

sql存储过程和事务的应用,布布扣,bubuko.com

时间: 2024-10-10 08:02:39

sql存储过程和事务的应用的相关文章

sql 存储过程、事务、视图、触发器

1存储过程1.1存储的格式 create proc name as begin 语句 end1.2执行存储 exec name1.3无参数 --创建存储过程if (exists (select * from sys.objects where name = 'sstudent')) drop proc sstudentgocreates studentas select * from student; --调用.执行存储过程exec student;1.4带参数--带参存储过程create pr

SQL 存储过程入门(事务)(四)

SQL 存储过程入门(事务)(四) 本篇我们来讲一下事务处理技术. 为什么要使用事务呢,事务有什么用呢,举个例子. 假设我们现在有个业务,当做成功某件事情的时候要向2张表中插入数据,A表,B表,我们插入的顺序是先插入A,再插入B表,如果都顺利插入成功了,当然没有问题,如果任意一张表插入失败了,而另一张表插入成功了,插入成功的表就是垃圾数据了.我们要判断,任意一张表插入失败都回滚,就是都不插入,这就是事务的基本使用. 一,sql事务定义 所谓事务是用户定义的一个数据库操作序列,是一个不可分割的工作

Mysql存储过程包含事务,且传入sql数据执行

有一个需求是:在一个图片按钮上点击,在按钮的上方弹出一个弹框,根据弹框的内容页面做不同的显示.这个其实没什么难的,主要是要控制好弹框的显示位置,让弹框显示在图片的正上方的中间. 一开始是用的Popupwindow,但是Popupwindow不能给弹窗之外的页面加一个半透明的蒙层,当然可以在页面上加一个专门的作为蒙层的View,但是很显然,这么做会代码变得很恶心,于是又换成了Dialog,因为Dialog弹出的时候会自动加一个蒙层的,但是这个时候,弹框显示位置的Y坐标不对了,后来一顿查,原来Dia

06 数据库入门学习-视图、sql注入、事务、存储过程

一.视图 1.什么是视图 视图本质是一张虚拟的表 2.为什么要用 为了原表的安全 只要有两大功能 1.隐藏部分数据,开放指定数据 2.视图可以将查询结果保存,减少sql语句的次数 特点: 1.视图使用永久保存的,而且保存的仅仅是一条 as sql语句 2.每次对视图的查询,都是再次执行了保存的sql语句 3.对于视图的任何修改都会同步到原表 3.如何使用 语法: create view 视图名 as select * from 原表名; 验证:对视图的任何修改会改变原表  验证 二.sql注入

SQL存储过程

1.认识存储过程 学完菜鸟上的SQL操作后打算好好深入下索引,然而学习过程中实际操作好多都是存储过程,所以只能先掌握存储过程再去深入索引了.使用存储过程有3个优点:存储过程是一个编译过的代码块,因此执行效率比t-sql高:使用存储过程可以不要写大量的t-sql语句,提高通信速率:通过存储过程能够使没有权限的用户在控制之下间接地存取数据库,保证数据的安全性.在SQL中存储过程分为系统存储过程和用户自定义存储过程,系统存储过程主要是以sp_为前缀的,下面是常用的系统存储过程,在我的sql里测试成功.

mysql存储过程之事务篇

mysql存储过程之事务篇 事务的四大特征: ACID:Atomic(原子性).Consistent(一致性).Isolated(独立性).Durable (持久性) MySQL的事务支持不是绑定在MySQL服务器本身,而是与存储引擎相关: sql代码  1. MyISAM:不支持事务,用于只读程序提高性能 2. InnoDB:支持ACID事务.行级锁.并发 3. Berkeley DB:支持事务 事务隔离级别标准: ANSI(美国国家标准学会)标准定义了4个隔离级别,MySQL的InnoDB都

PL/SQL存储过程编程

/**author huangchaobiao *Email:[email protected] */ PL/SQL存储过程编程(上) 1. Oracle应用编辑方法概览 答:1) Pro*C/C++/... : C语言和数据库打交道的方法,比OCI更常用; 2) ODBC 3) OCI: C语言和数据库打交道的方法,和ProC很相似,更底层,很少用; 4) SQLJ: 很新的一种用Java访问Oracle数据库的方法,会的人不多; 5) JDBC 6) PL/SQL: 存储在数据内运行, 其他

一个简单的存储过程使用事务的例子

在存储过程中使用事务时非常重要,使用数据库可以保持数据的关联完整性,在SQL Server存储过程中使用事务也很简单,举个例子: Create Procedure MyProcedure ( @Param1 nvarchar(10), @Param2 nvarchar(10) ) AS Begin Set NOCUNT ON; Set XACT_ABORT on; Begin Tran Delete from table1 where name='abc'; insert into table2

SQL存储过程内部RaisError客户端抓不住弹不出错误的解决

我们有个海宏商业erp3,库存部分是用存储过程写的,减库存时会先检查负库存,比如还有5个你想出库6个,存储过程就raisError('库存不足',16,1). 最近这一个版本发布后,有客户反映有时候会出负库存. 再一个,我们软件特殊情况下会同时操作本地和远程两个数据库.开两个sql事务,容易产生莫名其妙的错误. 倒腾了一阵,结果汇总在这里,百度上搜不到答案,希望以后有人遇到能管用. {*****************************************测试目的***********