效果:

创建带有事物的存储过程:

use sales  --指定数据库

create table bb  --创建bb 这个表
(
ID int not null primary key ,--账号
Moneys money --转账金额
) --bb表里插入两条数据
insert into bb values('1',2000) --账户 1 里有2000元
insert into bb values('2',3000) --账户 2 里有3000元
go if(exists(select * from sys.objects where name='proc_bb')) --如果存储这条存储过程存在则先删除
drop proc Proc_bb
go create proc Proc_bb --创建名字为Proc_bb的存储过程 带3个参数
(
@fromID int, --转出账户
@toID int, --接收转账的账户
@momeys money --转账金额
)
as
begin tran --开始执行事务 update bb set Moneys=Moneys-@momeys where ID=@fromID ---执行的第一个操作,转账 原来的金额-转账的金额 update bb set Moneys=Moneys+@momeys where ID=@toID --执行第二个操作,接受转账 原来的的金额+转账的金额 if @@ERROR<>0 --判断 如果两条语句有任何一条出现错误。(如果前面的SQL 语句执行没有错误,则返回0)
begin
rollback tran --开始执行事务的回滚,恢复转账开始之前的状态
return 0
end else --如果两个语句都执行成功
begin
commit tran --执行这个事务的操作
end
go exec Proc_bb 1,2 ,2000 --执行这条存储过程; 转账账户为 1 接收账户为 2 转账的金额为 2000元

 

前端代码:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm2.aspx.cs" Inherits="用户激活.WebForm2" %>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
转账账户:<asp:TextBox ID="ToID" runat="server"></asp:TextBox></br>
接收账户:<asp:TextBox ID="FromID" runat="server"></asp:TextBox></br>
转账金额:<asp:TextBox ID="Money" runat="server"></asp:TextBox></br>
转账是否成功:<asp:Label ID="Msg" runat="server" Text=""></asp:Label></br> <asp:Button ID="Button1" runat="server" Text="提交转账" onclick="Button1_Click" />
</form>
</body>
</html>

  

后端代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Configuration;
using System.Data.SqlClient; namespace 用户激活
{
public partial class WebForm2 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{ } protected void Button1_Click(object sender, EventArgs e)
{
string connStr=ConfigurationManager.ConnectionStrings["ConnStr"].ConnectionString;
using (SqlConnection conn = new SqlConnection(connStr))
{
conn.Open();
using (SqlCommand cmd = conn.CreateCommand())
{
//SqlParameter sqlParameter=new SqlParameter();
SqlParameter [] sqlParameters={
new SqlParameter("@toID",ToID.Text.Trim()),
new SqlParameter("fromID",FromID.Text.Trim()),
new SqlParameter("@money",Money.Text.Trim()) }; cmd.CommandText = "exec Proc_bb @toID, @fromID, @money";
cmd.Parameters.AddRange(sqlParameters); int i= cmd.ExecuteNonQuery(); if (i > 0)
{
Msg.Text = "转账成功";
}
else
{
Msg.Text = "转账失败";
} }
}
}
}
}

 

MSSQL - 存储过程事物的更多相关文章

  1. Dapper逆天入门~强类型,动态类型,多映射,多返回值,增删改查+存储过程+事物案例演示

    Dapper的牛逼就不扯蛋了,答应群友做个入门Demo的,现有园友需要,那么公开分享一下: 完整Demo:http://pan.baidu.com/s/1i3TcEzj 注 意 事 项:http:// ...

  2. Oracle结果集 (MSSQL存储过程写报表)

    接触SQL Server比较多,写报表是用存储过程实现. 对Oracle实现像MSSQL那样,还是有很多疑问

  3. 托管代码编写mssql存储过程

    参考:http://wenku.it168.com/d_000642903.shtml 打开vs,创建数据库项目,添加新项,选择sql clr c#, 选择存储过程. 样例: [Microsoft.S ...

  4. SQL系列学习 存储过程&事物语法

    /*学习事物基本语法*/ /*增加课室名的唯一索引*/ ALTER table class add constraint uni_ClassName unique(name) /*创建存储过程,其中增 ...

  5. MSSQL手札三 MSSQL存储过程

    --存储过程完成一段sql代码的封装 create proc trim --参数列表,多个间用逗号分隔 ) as --自定义代码段 ) set @str1=LTRIM(RTRIM(@str)) pri ...

  6. MSSQL存储过程(好久的笔记,翻出来怀念下)

    语法结构: create proc 名称 参数列表 as 代码段 调用: exec 存储过程名称 参数列表 要点: .可以使用output修饰参数 .可以使用默认值,注意需要将最后的参数设置成默认值 ...

  7. MSSQL - 存储过程Return返回值

    1.存储过程中不使用外部参数. 存储过程: SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ========================== ...

  8. MSSQL - 存储过程OutPut返回值

    1.存储过程中不使用外部参数. 存储过程: SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ========================== ...

  9. MSSQL存储过程接收另一个存储过程返回列表

    CREATE TABLE #tmp(m_Meter_ID varchar(20),low_Voltage int,num_Attack int,num_DER int,company_id int,a ...

随机推荐

  1. stm32之RCC

    stm32时钟系统的意义: 1.电源的开关作用,达到低功耗效果: 2.调节时钟的速度: 对于每个外设,都要设置设置,stm32的时钟系统为了更低功耗: STM32时钟系统框图分析: 时钟源: 时钟是S ...

  2. java 对象赋值问题

    import java.io.*; class CCircle{ private static double pi = 3.1415; private double radius; public CC ...

  3. Python 2.7 学习笔记 元组的使用

    一.元组 python中的元组和列表非常类似,核心区别是元组的内容初始化后是不可以修改的,而队列可以. 关于列表的详细介绍,可查看上一篇列表使用文章. 大部分场景下,能用元组的地方,都可以用列表.但有 ...

  4. 雅虎UED--无障碍网页设计

    转自:http://www.sharetk.com/html/ued/Interactive-Design/1394.html 随着web使用量的增加和人们网络意识的增强,一些特殊用户开始被我们所关注 ...

  5. 再造 “手机QQ” 侧滑菜单(三)——视图联动

    代码示例:https://github.com/johnlui/SwiftSideslipLikeQQ 本 文中,我们将一起使用 UINavigationController 来管理主视图,并实现点击 ...

  6. 跨平台运行ASP.NET Core 1.0(转载)

    前言 首先提一下微软更名后的叫法: ASP.NET 5 更名为 ASP.NET Core 1.0 .NET Core 更名为 .NET Core 1.0 Entity Framework 7 更名为  ...

  7. android4.0移植,拨号异常

    D/dalvikvm( 2274): GC_CONCURRENT freed 206K, 12% free 6571K/7431K, paused 2ms+3ms D/dalvikvm( 2274): ...

  8. 【转】CentOS上安装 jdk:rpm安装和源码安装

    1.安装 jdk-8u5-linux-x64.rpm 原文链接:http://www.cnblogs.com/xsi640/p/3756995.html 先下载最新的jdk版本 文件名:jdk-8u5 ...

  9. [转]给Linux系统管理员准备的Nmap命令的29个实用范例+ tsysv 系统服务器管理器

    原文链接:http://os.51cto.com/art/201401/428152.htm Nmap即网络映射器对Linux系统/网络管理员来说是一个开源且非常通用的工具.Nmap用于在远程机器上探 ...

  10. Qt学习之路(58): 进程间交互(QProcess.readAllStandardOutput可以读取控制台的输出)

    所谓 IO 其实不过是与其他设备之间的数据交互.在 Linux 上这个概念或许会更加清楚一些.Linux 把所有设备都看作是一种文件,因此所有的 IO 都归结到对文件的数据交互.同样,与其他进程之间也 ...