sql事务的调用
一、数据库的SQL
USE [Text]
GO
/****** Object:  StoredProcedure [dbo].[mon]    Script Date: 2017-01-03 15:59:28 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER proc [dbo].[mon]
@toID int, --接收转账的账户
@fromID int , --转出自己的账户
@momeys money, --转账的金额
@back int output,--返回值
@frommomeys money output,--转出方金额
@tomomeys money output--接收方金额
as
begin tran --开始执行事务
update bb set moneys=moneys-@momeys where ID=@fromID --执行的第一个操作,转账出钱,减去转出的金额
select @frommomeys=moneys from bb where ID=@fromID--转出后金额
update bb set moneys=moneys+@momeys where ID=@toID --执行第二个操作,接受转账的金额,增加
select @tomomeys=moneys from bb where ID=@toID--转出后金额
if @@error<>0 --判断如果两条语句有任何一条出现错误
begin rollback tran --开始执行事务的回滚,恢复的转账开始之前状态
set @back=1 --返回1失败
return
end
else --如何两条都执行成功
begin commit tran 执行这个事务的操作
set @back=0  --返回0成功
return
end
二、事务调用
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace SQL事务
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
private void button1_Click(object sender, EventArgs e)
        {
            SqlConnection con = new SqlConnection(@"Data Source=.;database=Text;uid=sa;pwd=123456"); //连接字符串
SqlCommand cmd = new SqlCommand("mon", con); //调用存储过程
cmd.CommandType = CommandType.StoredProcedure;
con.Open();
SqlParameter prar = new SqlParameter();//传递参数
cmd.Parameters.AddWithValue("@fromID", textBox2.Text);
cmd.Parameters.AddWithValue("@toID", textBox3.Text);
cmd.Parameters.AddWithValue("@momeys", Convert.ToInt32(TextBox1.Text));
cmd.Parameters.Add("@back", SqlDbType.Int).Direction = ParameterDirection.Output;
cmd.Parameters.Add("@frommomeys", SqlDbType.Money).Direction = ParameterDirection.Output;
cmd.Parameters.Add("@tomomeys", SqlDbType.Money).Direction = ParameterDirection.Output;
        
            cmd.ExecuteNonQuery();
string value = cmd.Parameters["@back"].Value.ToString();//把返回值赋值给value
from_money.Text =Convert.ToInt32(cmd.Parameters["@frommomeys"].Value).ToString();//获取转方剩余金额
to_money.Text = Convert.ToInt32(cmd.Parameters["@tomomeys"].Value).ToString();//获取到方金额
if (value == "0")
            {
Label1.Text = "添加成功";
}
else
            {
Label1.Text = "添加失败";
}
        }
private void button2_Click(object sender, EventArgs e)
        {
            SqlConnection con = new SqlConnection(@"Data Source=.;database=Text;uid=sa;pwd=123456");
con.Open();
SqlTransaction tran = con.BeginTransaction();//先实例SqlTransaction类,使用这个事务使用的是con 这个连接,使用BeginTransaction这个方法来开始执行这个事务
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
cmd.Transaction = tran;
try
            {
//在try{} 块里执行sqlcommand命令,
cmd.CommandText = "update bb set moneys=moneys-'" + Convert.ToInt32(TextBox1.Text) + "' where ID='" + textBox3.Text + "'";
cmd.ExecuteNonQuery();
cmd.CommandText = "update bb set moneys=moneys+'" + Convert.ToInt32(TextBox1.Text) + "' where ID='" + textBox2.Text + "'";
cmd.ExecuteNonQuery();
tran.Commit();//如果两个sql命令都执行成功,则执行commit这个方法,执行这些操作
Label1.Text = "添加成功";
}
catch
            {
Label1.Text = "添加失败";
tran.Rollback();//如何执行不成功,发生异常,则执行rollback方法,回滚到事务操作开始之前;
}
}
    }
}
sql事务的调用的更多相关文章
- sql事务(Transaction)用法介绍及回滚实例
		sql事务(Transaction)用法介绍及回滚实例 事务(Transaction)是并发控制的单位,是用户定义的一个操作序列.这些操作要么都做,要么都不做,是一个不可分割的工作单位.通过事务, S ... 
- SQL事务
		一.事务概念 事务是一种机制.是一种操作序列,它包含了一组数据库操作命令,这组命令要么全部执行,要么全部不执行.因此事务是一个不可分割的工作逻辑单元.在数据库系统上执行并发操作时事务是作为最小的 ... 
- SQL 事务及实例演示
		简介 事务,英文名称是transaction.是在对数据库进行管理操作过程中一个逻辑单位,由有限的操作序列构成. 其实这个概念很好懂,简单理解就是:事务就是在使用数据库中的一个操作,由一些操作放到一起 ... 
- ADO.NET系列之事务和调用存储过程
		ADO.NET系列之Connection对象 ADO.NET系列之Command对象 ADO.NET系列之DataAdapter对象 ADO.NET系列之事务和调用存储过程 前几篇我们介绍了Conne ... 
- SQL 事务与锁
		了解事务和锁 事务:保持逻辑数据一致性与可恢复性,必不可少的利器. 锁:多用户访问同一数据库资源时,对访问的先后次序权限管理的一种机制,没有他事务或许将会一塌糊涂,不能保证数据的安全正确读写. 死锁: ... 
- Mysql - 游标/动态sql/事务
		游标这个在我目前的项目里面用的还不多, 但是其功能还是很强大的. 动态sql以前都没用过, 是跟着富士康(不是张全蛋的富土康哦)过来的同事学的. 还是挺好用的. 我的数据库方面, 跟他学了不少. 在此 ... 
- 30分钟全面解析-SQL事务+隔离级别+阻塞+死锁
		以前总是追求新东西,发现基础才是最重要的,今年主要的目标是精通SQL查询和SQL性能优化. 本系列主要是针对T-SQL的总结. [T-SQL基础]01.单表查询-几道sql查询题 [T-SQL基础] ... 
- SQL—— 事务
		SQL 事务: 1. 定义: 事务是作为单个逻辑单元执行的一系列操作. 多个操作作为一个整体向系统提交,要么执行.要么都不执行,事务是一个不可分割的工作逻辑单元.这特别适用于多用户同时操作的数据通信 ... 
- sql事务,在sql2000里判断执行是否成功用@@ERROR 判断
		原文:sql事务,在sql2000里判断执行是否成功用@@ERROR 判断 贴个sql事务,在sql2000里判断执行是否成功用@@ERROR 判断 这个东西多少还是有点问题,sql2005了可以用t ... 
随机推荐
- div内容滚动,无缝滚动
			function startmarquee(lh, speed, delay) { var t; var oHeight = 373; /** div的高度 **/ ... 
- SQL server2000更改数据库名称
			如果是SQL Server 2005可以直接右键重命名,但是SQL Server 2000中不能直接改,可以用sp_renamedb. 1.方法一(物理法): 把Old数据库改为New数据库 打开“企 ... 
- 利用 iframe解决ajax的跨域问题
			问题 1. form提交或a标签跳转方式提交不会引发跨域问题. 2. ajax出于安全问题就有了跨域问题,因为一次请求中既访问了外部域最后返回了自己的域. 3. 用iframe其实就是想仿照ajax的 ... 
- Installscript如何给自定义路径的变量赋值
			installscript自定义路径的赋值 TextSub("MY_WINDOWS_TEMP_SQL2008_DIR")="C:\\Windows\\temp2\\&q ... 
- start a new android studio project not working
			现象:点击无响应 解决:Configure -> Project Defaults -> Project Structure -> Platform Settings (SDK) c ... 
- Java设计模式(一) 简单工厂模式不简单
			摘要:本文介绍了简单工厂模式的概念,优缺点,实现方式,以及结合Annotation和反射的改良方案(让简单工厂模式不简单).同时介绍了简单工厂模式(未)遵循的OOP原则.最后给出了简单工厂模式在JDB ... 
- zookeeper的安装(图文详解。。。来点击哦!)
			zookeeper的安装(图文详解...来点击哦!) 一.服务器的配置 三台服务器: 192.168.83.133 sunshine 192.168.83.134 sunshineMin 19 ... 
- HTML5 input placeholder 颜色修改示例
			Chrome支持input=[type=text]占位文本属性,但下列CSS样式却不起作用: CSS 复制代码 代码如下: input[placeholder], [placeholder], *[p ... 
- sql关于Group by
			SELECT JBGS.XMID, SUM(JBGS.JBGS * JBYXXS.YXXS) / (SELECT SUM(B.GS) FROM T_XMCBHZ B WHERE B.XMID= ... 
- Beta版本测试报告
			爬虫测试: 由于爬虫是整个系统的数据来源,十分的重要,但是由于引用了jar包并且运行复杂,这里主要做功能性测试,通过增加seed,运行爬虫,可以在后台控制台看到日志的不断刷新以及数据库条目的不断增加, ... 
