asp.net

位置:IT落伍者 >> asp.net >> 浏览文章

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


发布日期:2018年03月31日
 
ASP.NET事务处理和异常处理
使用SQLTransaction类和NET提供的异常处理机制我们就能够以一种可靠的方式处理数据库运行中的问题和发现系统异常这篇小文章将解释事务处理和异常处理的概念和用法

什么是事务?

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

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

下面是一个事务的例子

[SQL SERVER or SQL SERVER]

BEGIN TRAN

INSERT INTO PRODUCT(PRODUCTID PRODUCTNAME) VALUES( KEYBOARD)

UPDATE PRODUCT SET PRICE= WHERE PRODUCTID=

IF (@ERROR>)

ROLLBACK

ELSE

COMMIT

什么是异常处理?

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

[c#]

try

{

//数据库操作命令

}

catch (Exception e)

{

?//如果有异常发生这部分语句将被执行

}

finally

{

?//无论是否有异常发生这部分语句都会得到执行

}

如何实现事务?

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

[Store Procedure]

CREATE PROCEDURE PRODUCT_SAVE( AS

DECLARE

(@USERID CHAR()

@LOCATION VARCHAR()

@RETURNS INT OUTPUT

)

BEGIN TRAN

UPDATE ADDRESS SET LOCATION=@LOCATION WHERE USERID=@USERID

IF (@@ERROR>)

BEGIN

@RETURNS= /* Fail to Update */

ROLLBACK

END

ELSE

@RETURNS= /* Succeed to update */

COMMIT

RETURN @RETURNS

[Web Application in C#]

int values;

DBClass dbc=new DBClass(); // 使用new命令生成一个数据库类

values=dbcupdatedb( Rain Street); //And call its function member to update record

if (values==)

Lable_messagetext= Update successfully;

else

Lable_messagetext= Sorry can not update this record please contact your DBA

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

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

[Web Applicaion in C#]

SqlConnection myConnection = new SqlConnection(Data Source=localhost;Initial Catalog=Northwind;Integrated Security=SSPI;);

myConnectionOpen();

SqlTransaction myTrans = myConnectionBeginTransaction(); //使用New新生成一个事务

SqlCommand myCommand = new SqlCommand();

myCommandTransaction = myTrans;

try

{

myCommandCommandText = Update Address set location= rain street where userid=;

myCommandExecuteNonQuery();

myTransCommit();

ConsoleWriteLine(Record is udated);

}

catch(Exception e)

{

myTransRollback();

ConsoleWriteLine(eToString());

ConsoleWriteLine(Sorry Record can not be updated);

}

finally

{

myConnectionClose();

}

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

上一篇:浅谈ASP.NET内部机制(三)

下一篇:asp.net中显示DataGrid控件列序号的几种方法