刘彦青编译 来自:yesky

使用SQL-Transaction类和.NET提供的异常处理机制,我们就能够以一种可靠的方式处理数据库运行中的问题和发现系统异常。这篇小文章将解释事务处理和异常处理的概念和用法。

  什么是事务?

  事务处理是由以一个单一的逻辑单位完成的一系列操作,它可以由一系列的SQL语句、SELECT、INSERT、UPDATE、DELETE组成,如果在该单位包含的操作执行完毕后没有发生错误,那么它对数据库所作的改变就是永久的了。如果一旦有错误发生,它就不会对数据库作任何修改或改变。

  要定义一个事务,需要使用Begin tran命令,在这一命令之后的任何语句都将被认为是事务的一部分。命令Commit用来完成事务,并使事务对数据库所作的修改成为永久的。Rollback命令用来取消一个事务,并还原事务对数据库所作的修改。

  下面是一个事务的例子:

[SQL SERVER7.0 or SQL SERVER2000]
 BEGIN TRAN
  INSERT INTO PRODUCT(PRODUCTID, PRODUCTNAME) VALUES("0001", "KEYBOARD")
  UPDATE PRODUCT SET PRICE=12 WHERE PRODUCTID= "0002"
  IF (@ERROR>0)
   ROLLBACK
  ELSE
 COMMIT

   什么是异常处理?

  开发一种错误消息处理机制、并向用户提供有用的、清楚、有意义的信息也是编程人员的任务之一,异常处理就是能够提供这一服务的一种机制。一旦事务失败,服务器就会向系统发出一个用于帮助用户发现并修复邦联的数据库错误信息。我们可以异常处理功能来获取这种异常信息,并修复出现的故障。异常处理功能的用法如下所示:

  [c#]

try{//数据库操作命令}catch (Exception e){?//如果有异常发生,这部分语句将被执行}finally{?//无论是否有异常发生,这部分语句都会得到执行}

如何实现事务?

  1、在一个存储过程中编写事务语句,并使用下面的控制发现是否有错误发生,返回相应的值,互联网应用程序会根据返回的值显示正确的和容易理解的错误信息。下面是一个事务的例子:

[Store Procedure]CREATE PROCEDURE PRODUCT_SAVE( ASDECLARE (@USERID CHAR(5),@LOCATION VARCHAR(50),@RETURNS INT OUTPUT)BEGIN TRANUPDATE ADDRESS SET LOCATION=@LOCATION WHERE USERID=@USERIDIF (@@ERROR>0)BEGIN@RETURNS=-1 /* Fail to Update */ROLLBACKENDELSE@RETURNS=0 /* Succeed to update */COMMIT

RETURN @RETURNS

[Web Application in C#]int values;DBClass dbc=new DBClass(); // 使用new命令生成一个数据库类values=dbc.updatedb("0001", "23 Rain Street"); //And call its function member to update recordif (values==0)Lable_message.text= "Update successfully";elseLable_message.text= "Sorry, can not update this record, please contact your DBA."

  上面的例子非常适合DBA等对数据库编程非常熟悉的编程人员,他们更喜欢在存储过程中完成异常处理功能。如果对数据库编程不太熟悉,则可以采取下面的方法:

  2、在.NET框架中,我们可以使用SqlTransaction类定义一个事务。此后,我们就可以使用commit或rollback函数控制事务。当然了,我们也可以使用.NET框架提供的异常处理功能获取系统异常。下面是一个有关的例子:

[Web Applicaion in C#]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();}

  需要注意的是,如果使用OleDb类而不是Sqlclient类来定义SQL命令和连接,我们就必须使用OleTransation来定义事务。

ASP.NET中的事务处理和异常处理相关推荐

  1. asp.net中Roles和User的异常处理机制的思考

    有两个函数,假设让我们实现,那么怎样处理异常情况呢? Roles.AddUserToRole(user, role); 在user已经是role的情况下应当怎样? Roles.RemoveUserFr ...

  2. .NET 3.5(12) - DLINQ(LINQ to SQL)之事务处理和并发处理

    步步为营VS 2008 + .NET 3.5(12) - DLINQ(LINQ to SQL)之事务处理和并发处理 作者:webabcd 介绍 以Northwind为示例数据库,DLINQ(LINQ ...

  3. 在asp.net中如何管理cache

    本文申明:本人凭着对英文和技术的热爱,根据自己有限的英文水平通过翻译文章以达到提高自身能力,如果有什么地方不对的,希望大家提意见. 目的:这篇文章将描述在asp.net中如何管理cache以及cach ...

  4. 【译】在Asp.Net中操作PDF – iTextSharp -利用块,短语,段落添加文本

    本篇文章是讲述使用iTextSharp这个开源组件的系列文章的第三篇,iTextSharp可以通过Asp.Net创建PDFs,就像HTML和ASP.Net为文本提供了多种容器一样,iTextSharp ...

  5. asp.net中缓存的使用介绍一

    介绍: 在我解释cache管理机制时,首先让我阐明下一个观念:IE下面的数据管理.每个人都会用不同的方法去解决如何在IE在管理数据.有的会提到用状态管理,有的提到的cache管理,这里我比较喜欢cac ...

  6. 深入浅出MySQL事务处理和锁机制

    深入浅出MySQL事务处理和锁机制 2015-01-13 架构师之旅 1. 事务处理和并发性 1.1. 基础知识和相关概念 1 )全部的表类型都可以使用锁,但是只有 InnoDB 和 BDB 才有内置 ...

  7. cache:缓存在asp.net中如何管理?服务器端缓存?Session, Application, Cache objectscache ,客户端缓存?Cookies,ViewState...

    本文申明:本人凭着对英文和技术的热爱,根据自己有限的英文水平通过翻译文章以达到提高自身能力,如果有什么地方不对的,希望大家提意见. 目的:这篇文章将描述在asp.net中如何管理cache以及cach ...

  8. ASP.NET 中 Cookie 的基本知识

    简介 Cookie 为 Web 应用程序保存用户相关信息提供了一种有用的方法.例如,当用户访问您的站点时,您可以利用 Cookie 保存用户首选项或其他信息,这样,当用户下次再访问您的站点时,应用程序 ...

  9. ASP.NET中Cookie编程的基础知识

    一.简介 Cookie 为 Web 应用程序保存用户相关信息提供了一种有用的方法.例如,当用户访问您的站点时,您可以利用 Cookie 保存用户首选项或其他信息,这样,当用户下次再访问您的站点时,应用 ...

最新文章

  1. 系统动力学_System Dynamics
  2. 避免神经网络过拟合的5种技术(附链接) | CSDN博文精选
  3. 零基础入门CV赛事,理论结合实践
  4. gptuefi优势_UEFI+GPT模式,对提升SSD性能非常明显 | 麦田一棵葱
  5. BZOJ2588 Count on a tree 【树上主席树】
  6. java 转发上传文件_Java 发送http请求上传文件功能实例
  7. mysql 事务 注意 优化_MySQL入门详解——事务、锁、优化
  8. 高效的Java集合框架GNU Trove的使用
  9. 高精度练习(hdoj1042)
  10. 字符串处理 BestCoder Round #43 1001 pog loves szh I
  11. J2ee项目环境搭建常用工具
  12. 图论之单源最短路径问题
  13. 计算机硬盘常用分区工具,三款好用的磁盘分区工具推荐
  14. 软件开发,网站建设,性价比高的PLC仿真软件。
  15. python判断素数的函数_python中判断素数的函数
  16. java项目配置双数据源,对两个不同服务器上的数据库中的数据进行CRUD
  17. python框架知乎_我正在学习python的flask框架?为什么样知乎没有选择 Ruby
  18. ATX 移动设备共享平台
  19. 基于51单片机的无线测温系统
  20. abstract 抽象学习

热门文章

  1. IDEA Java解析GeoJson.json文件
  2. Modbus协议在串行链路上的实现
  3. 基于YOLO的手部检测和计数实现(课程设计,训练和测试)(1)
  4. 4.1 ucGUI 图片显示方法
  5. C++中const的用法
  6. Easy3D:一个轻量级、易用、高效的C++库,用于处理和渲染3D数据
  7. 在Ubuntu 14.04 64bit上安装python-pyqt5软件包(python 2.7)
  8. LTE中基本通信过程的理解——上行调度
  9. git 对之前的commit 进行重新签名 Resign
  10. leetcode-440 字典序的第K小数字