SQL Server事务处理

 1         /// <summary>
 2         /// SQL Server事务处理
 3         /// </summary>
 4         /// <param name="sender"></param>
 5         /// <param name="e"></param>
 6         private void btn_Tran_click(object sender, EventArgs e)
 7         {
 8             //------------------------------------------------------------//
 9
10             SqlConnection con = new SqlConnection(server = (local); database = FreeNotes; UID = hf; Pwd = 123);
11
12             //------------------------------------------------------------//
13
14             //*** 要转钱的银行账户
15
16             //用来获取登录卡号的账户余额
17             int u1_money = GetMoney(Login.AccountNum.Tostring());
18
19             //用来获取要转钱的金额
20             int money = Int32.Parse(this.txtMonrey.Text);
21
22             //此时获得,减去转出金额之后的AccountNum账户的余额。
23             int ul_balance = u1_money - money;
24
25             //如果要转的金额大于卡里的金额,则提示余额不足。
26             if (ul_balance < 0)
27             {
28                 MessageBox.Show("账户余额不足!", "提示");
29             }
30             //------------------------------------------------------------//
31
32             //*** 接收钱的银行账户
33
34             //获得要转入txtInAccountmoney账户的余额信息
35             int u2_money = GetMoney(txtInAccountmoney.Text.Trim());
36
37             //此时获得的是另一个账户的余额加上即将转入金额的总计。
38             int u2_balance = u2_money + money;
39
40
41             //------------------------------------------------------------//
42
43             //SQL语句
44
45             //转出钱的SQL语句
46             string sqlIn = "";
47
48             //转入钱的SQL语句
49             string sqlOut = "";
50
51             //打开数据库连接
52             con.Open();
53
54             //创建事务对象
55             SqlTransaction st = con.BeginTransaction();
56
57             //创建账户1的SQLCommand对象
58             SqlCommand cmd1 = new SqlCommand(sqlIn, con);
59
60             //创建账户2的SQLCommand对象
61             SqlCommand cmd2 = new SqlCommand(sqlOut, con);
62
63             //把对象1添加到事务对象st中
64             cmd1.Transaction = st;
65
66             //把对象2添加到事务对象st中
67             cmd2.Transaction = st;
68
69             try
70             {
71                 //返回执行的行数,以为使用的两个SQL语句,所以是二。
72                 int i = cmd1.ExecuteNonQuery() + cmd2.ExecuteNonQuery();
73
74                 //判断是不是等于2,等于二就执行成功。
75                 if(i != 2)
76                 {
77                     //不等于2,抛出异常!
78                     throw new Exception();
79                 }
80                 else
81                 {
82                     MessageBox.Show("转账成功!", "提示");
83                 }
84             }
85             catch(Exception ex)
86             {
87                 st.Rollback();
88                 MessageBox.Show("转账失败!", "提示");
89             }
90             finally
91             {
92                 con.Close();
93             }
94         }
时间: 2024-08-10 23:14:32

SQL Server事务处理的相关文章

c# + Sql server 事务处理

事务(Transaction)是并发控制的单位,是用户定义的一个操作序列.这些操作要么都做,要么都不做,是一个不可分割的工作单位.通过事务,SQL Server能将逻辑相关的一组操作绑定在一起,以便服务器保持数据的完整性.在sql server+ .net 开发环境下,有两种方法能够完成事务的操作,保持数据库的数据完整性:一个就是用sql存储过程,另一个就是在ADO.NET中一种简单的事务处理:现在通过一个典型的银行转账的例子来说明一下这两个例子的用法我们先来看看sql存储过程是如何来完成事务的

SQL Server 事务处理的基本用法

SQLServer 中 @@ERROR 测试每一题啊语句的错误. 正确时候 @@ERROR  == 0 否则返回错误代码. (1)@@ERROR 函数 ==0 则没有错误, 否则返回错误代码. (2) BEGIN                       TRANSACTION      XXX;    --开始事务 ROLLBACK     TRANSACTION  XXX;    --回滚事务 COMMIT  TRANSACTION   XXX;    --提交事务

SQL Server 2000中查询表名,列名及字段类型

经常碰到一些忘记表名称的情况,此时只记得个大概,此时可通过查询系统表Sysobjects找到所要的表名,如要查找包含用户的表名,可通过以下SQL语句实现, Select * From sysobjects Where name like '%user%' 如果知道列名,想查找包含有该列的表名,可加上系统表syscolumns来实现,如想查找列名中包含有user的所有表名,可通过以下SQL语句来实现 Select * From sysobjects s Where Exists( Select *

SQL点滴9—SQL Server中的事务处理以及SSIS中的内建事务

原文:SQL点滴9-SQL Server中的事务处理以及SSIS中的内建事务 我们可以把SSIS中的整个package包含在一个事务中,但是如果在package的执行过程中有一个表需要锁定应该怎么处理呢?SSIS内建的事务处理可以解决这个问题.在此之前首先来熟悉一下SQL Server中的事务的概念. 事务 SQL Server中的事务是单个的工作单元.如果某一事务成功,则在该事务中进行的所有数据修改均会提交,成为数据库中永久的组成部分.如果事务遇到错误且必须取消或回滚,则所有的数据修改均被清除

SQL Server:存储过程中编写事务处理的方法小结

/**8. SQLServer存储过程中编写事务处理的方法小结**/ 原文出处: http://www.jb51.net/article/80636.htm 本文我们介绍了三种不同的方法,举例说明了如何在存储过程事务处理中编写正确的代码. 1. 常见写法: 在编写SQL Server 事务相关的存储过程代码时,经常看到下面这样的写法: begin tran update statement 1 ... update statement 2 ... delete statement 3 ... c

SQL Server查询优化与事务处理

博文目录一.索引二.视图三.存储过程四.系统存储过程五.触发器六.事务七.锁 一.索引 索引提供指针以指向存储在表中指定列的数据值,然后根据指定的次序排列这些指针,再跟随指针到达包含该值的列. 1.什么是索引 数据库中的索引与书籍中的目录相似.在一本书中,无需阅读整本书,利用目录就可以快速的查找到所需的信息.在数据库中,索引使数据库程序无须对整个表进行扫描,就可以在其中找到所需的数据.书中的目录就是一个词语列表,其中注明了包含各个词的页码.而数据库中的索引是某个表中一列或若干列值的集合,以及物理

SQL Server查询优化和事务处理

查询优化:顾名思义就是创建索引.视图等方式使数据库快速查找到需要的东西索引分为:唯一索引.主键索引.聚集索引.非聚集索引.复合索引.全文索引.在SQL Server中,一个表只能创建一个聚集索引,但可以创建多个非聚集索引.设置某列为主键,该列默认就为聚集索引.按照下列标准选择建立索引的列:频繁搜索的列:经常用于查询选择的列:经常排序.分组的列:经常用于连接的列(主键/外键)不要使用下面列创建索引:仅包含几个不同值的列:表中包含几行.在SQL 语句中,特别是在SELECT语句中正确使用索引可以大大

浅谈 SQL Server 查询优化与事务处理

之前我们简单了解了各种查询的用法,然而在实际开发中还会用到一些比较高级的数据处理和查询,包括索引.视图.存储过程和触发器.从而能够更好地实现对数据库的操作.诊断及优化. 什么是索引呢,索引是 SQL Server 编排数据的内部方法,他为 SQL Server 提供了一种方法来编排查询数据的路由,从而达到通过使用索引来提高数据库的检索速度.改善数据库性能. 索引也是分为以下六类:1.唯一索引:不允许两行具有相同的索引值,创建了唯一约束,将会自动创建唯一索引.2.主键索引:是唯一索引的特殊类型,将

SQL Server死锁排查

1. 死锁原理 根据操作系统中的定义:死锁是指在一组进程中的各个进程均占有不会释放的资源,但因互相申请被其他进程所站用不会释放的资源而处于的一种永久等待状态. 死锁的四个必要条件:互斥条件(Mutual exclusion):资源不能被共享,只能由一个进程使用.请求与保持条件(Hold and wait):已经得到资源的进程可以再次申请新的资源.非剥夺条件(No pre-emption):已经分配的资源不能从相应的进程中被强制地剥夺.循环等待条件(Circular wait):系统中若干进程组成