熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

ASP.NET中的事務處理和異常處理

2013-11-13 12:22:06  來源: .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來定義事務


From:http://tw.wingwit.com/Article/program/net/201311/15760.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.