当前位置: 首页 > 编程日记 > 正文

ASP.NET中的事务处理和异常处理

刘彦青编译 来自: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( AS
DECLARE
(@USERID CHAR(5),
@LOCATION VARCHAR(50),
@RETURNS INT OUTPUT
)
BEGIN TRAN
UPDATE ADDRESS SET LOCATION=@LOCATION WHERE USERID=@USERID
IF (@@ERROR>0)
BEGIN
@RETURNS=-1 /* Fail to Update */
ROLLBACK
END
ELSE
@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 record
if (values==0)
Lable_message.text= "Update successfully";
else
Lable_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来定义事务。

相关文章:

2020年AI产业报告:100个岗位抢1个人,计算机视觉成最大缺口

“你永远都不知道明天和‘公司的意外’哪个先来。”疫情期间,这是我们最战战兢兢的心情。但是显然,有些人体会不了。这份行业数据,让笔者“柠檬”了。1疫情下,有的公司宣布破产有的公司增长413%疫情期间,人工智能的价值…

.NET Winform也能画出类似QQ、飞信这样的窗口风格和控件效果

MPN企业宝智能升级程序界面采用.NET的Winform技术,并没有延续企业宝主程序的绘制界面技术——WPF。直接采用Winform实现类似QQ和飞信的窗口风格比较困难,WPF好在还有一个Blend设计工具,而Winform只能靠自己一个一个像素去对齐、去仔细看&…

【转】HashMap、TreeMap、Hashtable、HashSet和ConcurrentHashMap区别

转自:http://blog.csdn.net/paincupid/article/details/47746341 一、HashMap和TreeMap区别 1.HashMap是基于散列表实现的,时间复杂度平均能达到O(1)。 TreeMap基于红黑树(一种自平衡二叉查找树)实现的,时间复杂度平均…

ASP.NET实现数据图表

作者:马金虎 来自:yesky 在ASP中插入图表,常用的方法是使用MSChart控件。那么在ASP.NET是否也是这样呢?答案是不可以的。 我们知道ASP.NET是一种编译语言,当客户端第一次调用ASP.NET页面的时候,其实是经过了一种…

Struts2基础(1)_MVC

2019独角兽企业重金招聘Python工程师标准>>> Struts2是有传统的Struts1和WebWork两个经典MVC框架发展起来,无论从Struts2的设计角度或则实际项目中的易用性来开,它都是一个非常优秀的MVC框架。 MVC的理解:MVC思想将应用中各组件按…

我发现了个Python黑魔法,执行任意代码都会自动念上一段「平安经」

来源 | Python编程时光最近的"平安经"可谓是引起了不小的风波啊。作为一个正儿八经的程序员,最害怕的就是自己的代码上线出现各种各样的 BUG。为此,明哥今天分享一个 Python 的黑魔法,教你如何在你执行任意 Python 代码前&#xff…

Java第一天学习笔记整理

一、关键字 java的关键字对java的编译器有特殊的意义,他们用来表示一种数据类型,或者表示程序的结构等,关键字不能用作变量名、方法名、类名、包名。 常见的关键字: 用于定义数据类型的关键字 class interface byte short int lon…

ASP.NET中树形图的实现

来自:DotNET中文技术网 树形图用于显示按照树形结构进行组织的数据,其用途比较广泛,如计算机中的文件系统(Windows中的资源管理器)、企业或公司的组成结构等。我们知道在Windows下VB、PB、Delphi等工具提供了一个功能很强的树型控件TreeView…

同步你的手机联系人

从web1.0到2.0,我们进入了一个新的互联网时代移动时代.相信你的手机中,有许多联系人信息,你肯定不想把他们弄丢吧,像我之前隔一段时间就备份下,存到电脑中.现在再也不怕联系人信息丢了,只需要一个账户,同步一下,所有联系人信息都回来了.我是在Android智能手机上操作的,IOS就不清…

AI 技术发展飞快,高校 AI 教师的知识储备能满足学生旺盛的求知欲吗?

2019 年,AI 技术以惊人的速度发展;2020 年,AI 技术成熟的时机已经到来,随之而来的,是越来越旺盛的 AI 人才需求。近日,国家正式发布了一份《2020 年人工智能产业人才发展报告》显示,2020 年人工…

Windows Server 2008 R2安装子域控制器

一、实验网络拓扑图: 二、实验说明: 子域控制器安装前需要先把主域控制器安装好,然后子域控制器的DNS先指向主域控制器的IP地址 192.168.10.30,主域控制器委派DNS给子域控制器后再把子域控制器DNS指向自己的IP地址 192.168.10.31即…

使用嵌套的Repeater控件显示分级数据

作者:wincheer 来自:Asp.Net中文专业网 简介 本文描述如何使用嵌套的Repeater 控件来显示分级数据 。当然了,你也可以将这一技术应用到其他的列表绑定控件上去,比如DataGrid包含DataGrid,DataList包含DataList等等…

我还没考试,算法就说我的物理一定挂科

来源 | HyperAI超神经责编 | Carol封图 | CSDN 下载自视觉中国大学物理是理工科学生的基础必修课程,但也因为有一定的难度,令很多学生望而生畏。研究人员提出了用 AI 算法预测,哪些学生物理课有挂科风险,好让老师更好地进行教学指…

Dorado7功能及技术特点

简介 Dorado PresentationMiddleware(即Dorado展现中间件,以下简称Dorado)致力于辅助Web应用中表现层的开发过程。Dorado主要可以为您带来如下两方面的使用价值: 更加美观、更加人性化的Web操作界面。更加高效的表现层开发…

ELK日志分析平台搭建全过程

一、使用背景 当生产环境有很多服务器、很多业务模块的日志需要每时每刻查看时 二、环境 系统:centos 6.5 JDK:1.8 Elasticsearch-5.0.0 Logstash-5.0.0 kibana-5.0.0 三、安装 1、安装JDK 下载JDK:http://www.oracle.com/technetwork/java/j…

Android中Handler

本文通过例子来验证和说明使用Handler对象开启的线程是否和主线程为在同一线程中。 程序结构图如下: [1] HandlerActivity.java中的源码如下: [html] view plaincopyprint?package com.andyidea.handlerdemo2; import android.app.Activity; import…

刚出炉!程序员人才补贴:单项目最高补贴1000万元

最近,程序员届有一个重大好消息,可能很多人还不知道,那就是:国内某些城市已经开始程序员人才补贴了!对于人工智能公司的项目开发、人才引进、科技研发,最高按照国拨经费的30%给予配套支持,单个项…

ASP.NET中在线用户统计

天极论坛 统计在线用户的作用不言而喻,就是为了网站管理者可以知道当前用户的多少,然后根据用户数量来观察服务器或者程序的性能,从而可以直观的了解到网站的吸引力或者网站程序的效率。现在,我们就介绍一个简单明了的方法来统计…

数(Number)

--读《自然数原本:数数论》(薛海明,山西科学技术出版社)和《数论概论》([美]Joseph H.Silverman,机械工业出版社)笔记 人们对于数的认识从数数(counting)开始&#xff0c…

linux 中root用户与普通用户的切换

su是在用户间切换,可以是从普通用户切换到root用户,也可以是从root用户切换到普通用户。 如果当前是root用户,那么切换成普通用户test用以下命令:su test或su - test 如果要切换回root用户或普通用户切换至root用户,用…

2个月做出一款AI项目?这些学生在DeeCamp上决出两个总冠军

出品 | AI科技大本营(ID:rgznai100)2个月,一群来自世界各地高校的学生做出了技术与商业化兼具的AI落地项目。8月5日,DeeCamp 2020人工智能训练营迎来总冠军答辩暨结营典礼。最终,自动驾驶赛道和创新赛道的两支团队夺得…

C语言宏定义技巧

C语言宏定义技巧(常用宏定义) 写好C语言,漂亮的宏定义很重要,使用宏定义可以防止出错,提高可移植性,可读性,方便性等等。下面列举一些成熟软件中常用得宏定义。 1、防止一个头文件被重复包含 …

了解C++默默编写并调用哪些函数

在C中,如果你写下 1 classEmpty{…}; 就相当于写下1 classEmpty{ 2 public: 3 Empty();//default构造函数 4 Empty(constEmpty& rhs){……};//copy构造函数 5 ~Empty(){…}//析构函数 6 Empty&operator(constEmpty& rhs){…};//copy赋值运算符 7 }; 惟有…

仅50张图片训练数据的AI分类技术PK​,阿里拿下ECCV 2020竞赛冠军

出品 | AI科技大本营(ID:rgznai100)近日,两年一度的世界计算机视觉领域顶会ECCV 2020的各项挑战赛结果出炉,在图像分类赛中,阿里安全的高效AI分类技术超越三星、深兰科技、同济大学等国内外多支队伍的同类技术获得冠军…

Eclipse生成jar文件

2019独角兽企业重金招聘Python工程师标准>>> 具体做法如下: 方法一:(工程没有引用外部jar包时,直接导出) 选中工程---->右键,Export...--->Java--->JAR file--->next-->选择jar file的路径及名称-->…

动态的管理ASP.NET DataGrid数据列

动网先锋 在ASP.NET的DataGrid数据显示控件编程中,我们有几种方式可以增加DataGrid columns。其中最常见的方法是在web forms设计器中增加,通过在控件工具箱中拖访DataGrid控件到web设计页面,然后在属性生成器中增加Columns列;还有一种方式就…

Django模型层Meta内部类详解

Django 模型类的Meta是一个内部类,它用于定义一些Django模型类的行为特性。以下对此作一总结: abstract这个属性是定义当前的模型类是不是一个抽象类。所谓抽象类是不会对应数据库表的。一般我们用它来归纳一些公共属性字段,然后继承它的子类…

ASP.NET虚拟主机的重大安全隐患

作者:秦海鹏 来自: yesky 说明:本文中所有程序均在Windows 2000 Server中文版 SP2上编译运行无误开发环境:.Net 框架1.0 Version 1.0.3705 一、ASP.NET虚拟主机存在的重大隐患 我曾经在WWW.BRINKSTER.COM申请了一个免费的…

给力!一行代码躺赚普通程序员10年薪资!

笔者这两天闲逛知乎,看到了这个帖子:匿名答题,发表于2014年,此外没有留下任何多余信息。2年躺赚200万,相当于普通程序员10年的工资。没想到Pyhon这么强大,怪不得有人说“除了不会生孩子,Python什…

Hello world!

2019独角兽企业重金招聘Python工程师标准>>> 向世界打招呼,大家好,这是我的第一篇文章,我准备在这里开博! 转载于:https://my.oschina.net/chinesedragon/blog/57259