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

在机房收费系统中。有些操作。须要多次运行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 cardtype=@cardtype
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 status=@status 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使用存储过程和交易的更多相关文章

  1. SQL Server存储过程中使用表值作为输入参数示例

    这篇文章主要介绍了SQL Server存储过程中使用表值作为输入参数示例,使用表值参数,可以不必创建临时表或许多参数,即可向 Transact-SQL 语句或例程(如存储过程或函数)发送多行数据,这样 ...

  2. 使用 ODBC .NET 提供程序和 Visual C# .NET 执行 SQL 参数化存储过程

    http://support2.microsoft.com/kb/310130/zh-cn 此分步指导文章描述如何使用 ODBC .NET 托管提供程序和 Visual C# .Net 调用参数化 S ...

  3. SQL Server存储过程Return、output参数及使用技巧

    SQL Server目前正日益成为WindowNT操作系统上面最为重要的一种数据库管理系统,随着 SQL Server2000的推出,微软的这种数据库服务系统真正地实现了在WindowsNT/2000 ...

  4. 11月16日《奥威Power-BI基于SQL的存储过程及自定义SQL脚本制作报表》腾讯课堂开课啦

           上周的课程<奥威Power-BI vs微软Power BI>带同学们全面认识了两个Power-BI的使用情况,同学们已经迫不及待想知道这周的学习内容了吧!这周的课程关键词—— ...

  5. SQL Server 存储过程(转载)

    SQL Server 存储过程 Transact-SQL中的存储过程,非常类似于Java语言中的方法,它可以重复调用.当存储过程执行一次后,可以将语句缓存中,这样下次执行的时候直接使用缓存中的语句.这 ...

  6. 14、SQL Server 存储过程

    SQL Server 存储过程 存储过程类似函数,可以重复使用.相对于函数,存储过程拥有更强大的功能和更高的灵活性. 存储过程中可以包含逻辑控制语句和数据操作语句,可以接受参数,输出参数,返回单个值或 ...

  7. Sql Service存储过程分页

    一起是用oracle数据库..感觉oracle数据库强大.查询速度是杠杠的.换了家公司用的是SQL SERVICE.以前用了1年现在捡回以前的记忆.动手写了动态SQL过存储过程分页.感觉和oracle ...

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

    [转]关于SQL分页存储过程的分析 建立一个 Web 应用,分页浏览功能必不可少.这个问题是数据库处理中十分常见的问题.经典的数据分页方法是:ADO 纪录集分页法,也就是利用ADO自带的分页功能(利用 ...

  9. (摘录)SQL Server 存储过程

    文章摘录:http://www.cnblogs.com/hoojo/archive/2011/07/19/2110862.html SQL Server 存储过程 Transact-SQL中的存储过程 ...

随机推荐

  1. ASP.NET 4.5 Bundle组件(捆绑、缩小静态文件)

    阅读目录: 1.开篇介绍 2.System.Web.Optimization 组件 3.System.Web.Optimization 组件基本原理 4.扩展自定义类型静态文件 1]开篇介绍 这篇文章 ...

  2. 基于visual Studio2013解决C语言竞赛题之1047百马问题

      题目 解决代码及点评 /* 47.马百瓦问题.有100匹马,100块瓦,大马驮3块, 小马驮2块,两个马驹驮1块.问大马.小马.马驹各多少? 要求:① 不许用for循环; ② 循环次数 ...

  3. windows下建立文件的换行符^M导致linux下的shell脚本执行错误的解决方式

    常常在windows下编辑的文件远程传送到linux下的时候每行末尾都会出现^M.这将导致shell脚本执行错误,主要是由于dos下的编辑器和linux下的编辑器对文件末行的回车符处理不一致导致. 主 ...

  4. java 基于JDK中的源码总结下String二

    申明:转载请注明出处,如有商用目的请务必知会本人,感谢. 上一篇文章:http://blog.csdn.net/ts1122/article/details/8738336,介绍了String一些易错 ...

  5. 找到程序真正的入口(使用IDE追踪)

    一.程序的真正入口 main或WinMain只是“语法规定的程序入口” 并不是“应用程序入口”. 我们使用VC++ 6.0 的栈回溯功能,找到main函数之前的代码.菜单View -> Debu ...

  6. shell程序设计(转)

    1.shell脚本的基本概念: (1)Shell执行的是称为shell程序,这些程序通常被称为脚本. (2)Shell是一个用户和系统间接口的程序,它允许用户向操作系统输入需要执行的命令. (3)sh ...

  7. [置顶] C++之TinyXML的使用介绍

    一.引子: 最近在做GBT28181国标平台对接的工作,涉及到一些进程间消息通讯,消息体有xml格式,之前测试的时候都是拿他们当做字符串去解析,现在正儿八经地开发的时候,就想到了用xml库去解析,由于 ...

  8. io 测试

    //其中能够实现编码的只有OutputStreamWriter和对应inputStreamReader package net; import java.io.BufferedWriter; impo ...

  9. boost.asio系列——io_service

    IO模型 io_service对象是asio框架中的调度器,所有异步io事件都是通过它来分发处理的(io对象的构造函数中都需要传入一个io_service对象). asio::io_service i ...

  10. uva 129

    暴力求解 大致题意 如果一个字符串含有相邻的重复字串称为容易的串,反之为非容易 求字典序第n困难的串…… 大致思路,暴力如果是容易的串停过,然后困难的串继续求解tot++ 总之先记着吧…… 最后输出格 ...