ASP.NET中的事务处理和异常处理
使用SQL-Transaction类和.NET提供的异常处理机制,我们便可以够以1种可靠的方式处理数据库运行中的题目和发现系统异常。这篇小文章将解释事务处理和异常处理的概念和用法。
甚么是事务?
事务处理是由以1个单1的逻辑单位完成的1系列操纵,它可以由1系列的SQL语句、SELECT、INSERT、UPDATE、DELETE组成,假设在该单位包括的操纵履行终了后没有产生毛病,那末它对数据库所作的改变就是永久的了。假设1旦有毛病产生,它就不会对数据库作任何修改或改变。
要定义1个事务,需要使用Begin tran命令,在这1命令以后的任何语句都将被以为是事务的1部份。命令Commit用来完成事务,并使事务对数据库所作的修改成为永久的。Rollback命令用来取消1个事务,并还原事务对数据库所作的修改。
下面是1个事务的例子:
[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
甚么是异常处理?
开发1种毛病消息处理机制、并向用户提供有用的、清楚、故意义的信息也是编程职员的任务之1,异常处理就是能够提供这1服务的1种机制。1旦事务失败,服务器就会向系统发出1个用于帮助用户发现并修复邦联的数据库毛病信息。我们可以异常处理功能来获得这类异常信息,并修复出现的故障。异常处理功能的用法以下所示:
[c#]
try
{
//数据库操纵命令
}
catch (Exception e)
{
?//假设有异常产生,这部份语句将被履行
}
finally
{
?//不论是否是有异常产生,这部份语句都会得到履行
}
如何实现事务?
1、在1个存储进程中编写事务语句,并使用下面的控制发现是否是有毛病产生,返回相应的值,互联网利用程序会根据返回的值显示正确的和轻易理解的毛病信息。下面是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=⑴ /* Fail to Update */
ROLLBACK
END
ELSE
@RETURNS=0 /* Succeed to update */
COMMIT
RETURN @RETURNS
int values;
DBClass dbc=new DBClass(); // 使用new命令天生1个数据库类
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类定义1个事务。尔后,我们便可以够使用commit或rollback函数控制事务。固然了,我们也能够使用.NET框架提供的异常处理功能获得系统异常。下面是1个有关的例子:
[Web Applicaion in C#]
SqlConnection myConnection = new SqlConnection("Data Source=localhost;Initial Catalog=Northwind;Integrated Security=SSPI;");
myConnection.Open();
SqlTransaction myTrans = myConnection.BeginTransaction(); //使用New新天生1个事务
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来定义事务。 上1页 1 2 唐山网站建设www.fw8.net
TAG:数据库,命令,异常,语句,事务
评论加载中...
|