一、数据库的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事务的调用的更多相关文章

  1. sql事务(Transaction)用法介绍及回滚实例

    sql事务(Transaction)用法介绍及回滚实例 事务(Transaction)是并发控制的单位,是用户定义的一个操作序列.这些操作要么都做,要么都不做,是一个不可分割的工作单位.通过事务, S ...

  2. SQL事务

    一.事务概念    事务是一种机制.是一种操作序列,它包含了一组数据库操作命令,这组命令要么全部执行,要么全部不执行.因此事务是一个不可分割的工作逻辑单元.在数据库系统上执行并发操作时事务是作为最小的 ...

  3. SQL 事务及实例演示

    简介 事务,英文名称是transaction.是在对数据库进行管理操作过程中一个逻辑单位,由有限的操作序列构成. 其实这个概念很好懂,简单理解就是:事务就是在使用数据库中的一个操作,由一些操作放到一起 ...

  4. ADO.NET系列之事务和调用存储过程

    ADO.NET系列之Connection对象 ADO.NET系列之Command对象 ADO.NET系列之DataAdapter对象 ADO.NET系列之事务和调用存储过程 前几篇我们介绍了Conne ...

  5. SQL 事务与锁

    了解事务和锁 事务:保持逻辑数据一致性与可恢复性,必不可少的利器. 锁:多用户访问同一数据库资源时,对访问的先后次序权限管理的一种机制,没有他事务或许将会一塌糊涂,不能保证数据的安全正确读写. 死锁: ...

  6. Mysql - 游标/动态sql/事务

    游标这个在我目前的项目里面用的还不多, 但是其功能还是很强大的. 动态sql以前都没用过, 是跟着富士康(不是张全蛋的富土康哦)过来的同事学的. 还是挺好用的. 我的数据库方面, 跟他学了不少. 在此 ...

  7. 30分钟全面解析-SQL事务+隔离级别+阻塞+死锁

    以前总是追求新东西,发现基础才是最重要的,今年主要的目标是精通SQL查询和SQL性能优化.  本系列主要是针对T-SQL的总结. [T-SQL基础]01.单表查询-几道sql查询题 [T-SQL基础] ...

  8. SQL—— 事务

    SQL 事务: 1.  定义: 事务是作为单个逻辑单元执行的一系列操作. 多个操作作为一个整体向系统提交,要么执行.要么都不执行,事务是一个不可分割的工作逻辑单元.这特别适用于多用户同时操作的数据通信 ...

  9. sql事务,在sql2000里判断执行是否成功用@@ERROR 判断

    原文:sql事务,在sql2000里判断执行是否成功用@@ERROR 判断 贴个sql事务,在sql2000里判断执行是否成功用@@ERROR 判断 这个东西多少还是有点问题,sql2005了可以用t ...

随机推荐

  1. java生成二维码(需导入第三方ZXing.jar包)

    //这个类是用来解析,通过图片解析该图片的网页链接是什么 package util; import java.awt.Graphics2D;import java.awt.geom.AffineTra ...

  2. haslayout

    什么是 haslayout ? haslayout 是Windows Internet Explorer渲染引擎的一个内部组成部分.在Internet Explorer中,一个元素要么自己对自身的内容 ...

  3. 在 Windows 下部署 Vagrant

    Vagrant 是一个可创建轻便.可复用的虚拟开发环境的跨平台工具,通过打包分可使所有开发成员使用统一的开发环境. 下面是我自己记录配置 Vagrant 的过程. 1.安装 VirtualBox 略. ...

  4. JavaScript DOM 编程艺术·setInterval与setTimeout的动画实现解析

    先贴上moveElement()函数的大纲,为了方便观看,删了部分代码,完整版粘到文章后面. function moveElement(elementID,final_x,final_y,interv ...

  5. 排球比赛计分规则(P205页)

    排球比赛计分规则: 1.SPEC的目标是什么?SPEC的目标不包括什么? 为了让大家更加了解排球比赛. 2.SPEC用户和典型场景是什么? 用户:运动员,观众,教练 场景:排球赛场 3.SPEC用到哪 ...

  6. C#中ref,out

    out 关键字会导致参数通过引用来传递.这与 ref 关键字类似,不同之处在于 ref 要求变量必须在传递之前进行初始化.若要使用 out 参数,方法定义和调用方法都必须显式使用 out 关键字 比如 ...

  7. 原生select默认显示为空胡fish覅神农大丰今年圣诞节奋笔疾书发撒可交付你说的尽快发那段时间南方大厦尽可能放你的所发生的你富家大室耐腐蚀的看法呢尽快发你上课积啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊撒啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊分你束带结发你看

    下拉框默认为空: <select> <option value="" class="blank"></option> < ...

  8. Something you need to perform after RedHat 6.x installed

    Something you need to perform after RedHat 6.x installed YUM Repos % yum update % rpm -Uvh http://do ...

  9. C#压缩图片——高质量压缩方式

    传入Bitmap对象,以及新图片的长宽(Bitmap.Size),这样生成的就是跟原图尺寸一致的低质量图片 public Bitmap GetImageThumb(Bitmap mg, Size ne ...

  10. apache不断占内存过大,导致虚拟机内存不足,处理方法。

    我用512M的vps,访问量不大,但内存占用很大,甚至宕机. 我用top,然后shitf+m发现,httpd占用内存极大.经过网上找资料设置后,用过一段时间终于没再出现内存问题了. 首先查找配置文件的 ...