ASP.NET中的交易處理和異常處理__.net

來源:互聯網
上載者:User

劉彥青編譯 來自: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來定義事務。
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.