.Net和SqlServer的事务处理实例
1,SqlServer存储过程的事务处理
一种比较通用的出错处理的模式大概如下:
Create procdure prInsertProducts
(
 @intProductId int,
 @chvProductName varchar(30),
 @intProductCount int
)
AS
Declare @intErrorCode int
Select @intErrorCode=@@Error
Begin transaction
 if @intErrorCode=0
   begin
     -insert products
     insert products(ProductID,ProductName,ProductCount) 
     values(@intProductId,@chvProductName,@intProductCount)
     Select @intErrorCode=@@Error --每执行完一条t-sql语句马上进行检测,并把错误号保存到局部变量中
   end
 if @intErrorCode=0
   begin 
     -update products
     update products set ProductName='MicroComputer' where ProductID=5
     Select @intErrorCode=@@Error
   end
if @intErrorCode=0
   commit transaction
else
   rollback transaction
Return @intErrorCode --最好返回错误代号给调用的存储过程或应用程序
2,.Net中使用事务处理
SqlConnection myConnection = new SqlConnection("Data Source=localhost;Initial Catalog=Northwind;Integrated Security=SSPI;"); 
myConnection.Open();
SqlTransaction myTrans = myConnection.BeginTransaction(); //使用New新生成一个事务 
SqlCommand myCommand = new SqlCommand(); 
myCommand.Transaction = myTrans;
try 
{ 
myCommand.CommandText = "Update Address set location='23 rain street' where userid='0001'"; 
myCommand.ExecuteNonQuery(); 
myTrans.Commit(); 
Console.WriteLine("Record is udated."); 
} 
catch(Exception e) 
{ 
myTrans.Rollback(); 
Console.WriteLine(e.ToString()); 
Console.WriteLine("Sorry, Record can not be updated."); 
} 
finally 
{ 
myConnection.Close(); 
}
说明:在SqlServer中,每条Sql语句都作为一个事务来执行,所以无论在存储过程,还是在.net代码中使用,执行单条Sql语句没有必要使用事务处理,上面只是为了简化表达而对单条Sql语句使用事务处理
.Net和SqlServer的事务处理实例的更多相关文章
- SqlServer 由于未在SqlServer的此实例上安装复制组件解决方法
		sqlserver2005在复制订阅时出现: “由于未在SqlServer的此实例上安装复制组件,Microsoft SQL server 无法访问这些组件,请参阅SQL Server……” 解决方法 ... 
- PHP mysql 事务处理实例
		事务是必须满足4个条件(ACID):原子性(Autmic).一致性(Consistency).隔离性(Isolation).持久性(Durability) 原子性(Autmic):事务在执行性,要做到 ... 
- SQLserver分页查询实例
		Sqlserver数据库分页查询一直是Sqlserver的短板,闲来无事,想出几种方法,假设有表ARTICLE,字段ID.YEAR...(其他省略),数据53210条(客户真实数据,量不大),分页查询 ... 
- SQLServer中游标实例介绍(转)
		引言 我们先不讲游标的什么概念,步骤及语法,先来看一个例子: 表一 OriginSalary 表二 AddSalary 现在有2张表,一张是OriginSal ... 
- sqlserver 存储过程  游标实例
		if exists(select * from sysobjects where id = object_id(N'dbo.test_cursor') and type = 'P') drop PRO ... 
- 65. sqlserver执行存储过程实例
		declare @param varchar(500)exec sp_PUB_GetFlowStatus @ret output,10011,88,1,12print @ret 
- SQLSERVER 修改数据实例的排序规则
		SQL Server服务器修改排序规则的方法 操作及验证步骤: 1 登录数据库后,查看当前安装数据库默认排序规则的两种方式 方式一.使用SQL Server 2014 Management Studi ... 
- JDBC连接自定义sqlserver数据库实例名(多个实例)
		java语言中,通过jdbc访问sqlserver2005(2008)数据库默认实例可以按常用的写法来写url连接.代码如下: <span style="font-size:12px; ... 
- 简述SQL2008部署多实例集群(学习)
		数据库集群 集群的存在意义是为了保证高可用.数据安全.扩展性以及负载均衡. 什么是集群? 由二台或更多物理上独立的服务器共同组成的"虚拟"服务器称之为集群服务器.一项称做M ... 
随机推荐
- PHP:第一章——PHP中的算术运算符/递增、递减运算符/赋值运算符
			算术运算符 //$a=10; $b=5; //取反: //echo -$a;//输出:-10: //加法: //echo $a+$b;//输出:15 //减法: //echo $a-$b;//输出:5 ... 
- [Android Studio] Android Studio常用快捷键
			[Android Studio] Android Studio常用快捷键 (会持续更新)这边讲的常用快捷键是指做完Keymap到Eclipse后的,不是纯Android Studio的,这边主要讲 ... 
- KMP 详解图
- 做了一个vue的同步tree 的npm组件包
			前言:因为现成的tree组件没有找到.亦或是其依赖的其他东西太多,不太合适引入我们的项目,所以自己做了一个.大概样式: 在线例子: https://hamupp.github.io/t-vue-tre ... 
- Apple原装扫描二维码指定区域
			之前记录了用Apple原装的AVFoundationo类库扫描二维码:http://www.cnblogs.com/foxting/p/4733226.html,此篇记录下如何设置扫描区域. AVCa ... 
- vue 之 Vue.extend()
			Vue.extend( options ) 参数: {Object} options 用法: 使用基础 Vue 构造器,创建一个“子类”.参数是一个包含组件选项的对象. data 选项是特例,需要注意 ... 
- lintcode 刷题 by python 总结(1)
			博主之前在学习 python 的数据结构与算法的基础知识,用的是<problem-solving-with-algorithms-and-data-structure-using-python& ... 
- linux下源码安装jdk1.8和tomcat8.5
			Java是目前可移植性较高的语言,相当火热,tomcat运行就需要Java语言环境 0.java简介 1)tomcat运行需要对应的Java环境,Java环境通过安装jdk来获得2)为了防止兼容性问题 ... 
- linux配置禁用启用IPv6
			IPv6被认为是IPv4的替代产品,它用来解决现有IPv4地址空间即将耗尽的问题.但目前,开启IPv6可能会导致一些问题.因此有时我们需要关闭IPv6.下面是IPv6的关闭方法应该适用于所有主流的Li ... 
- 概率DP HDU 4586 play the dice
			题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4586 解题思路: 只考虑第一次,获得的金币的平均值为sum/n.sum为所有色子的面的金币值相加. ... 
