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

VB.NET使用OracleTransaction處理事務

2013-11-13 10:10:19  來源: .NET編程 
數據庫事務簡介

  數據庫事務是由一組 SQL 語句組成的一個邏輯工作單元您可以把事務看作是一組不可分的 SQL 語句這些語句作為一個整體永久記錄在數據庫中或一並撤銷比如在銀行帳戶之間轉移資金一條 UPDATE語句將從一個帳戶的資金總數中減去一部分另一條 UPDATE語句將把資金加到另一個帳戶中減操作和加操作必須永久記錄在數據庫中或者必須一並撤銷 — 否則將損失資金這個簡單的示例僅使用了兩條 UPDATE 語句但一個更實際的事務可能包含許多 INSERTUPDATE和 DELETE 語句

  要永久記錄一個事務中的 SQL 語句的結果您可以通過 COMMIT 語句來執行提交要撤銷 SQL 語句的結果您可以使用 ROLLBACK 語句來執行回滾這會把所有的行重設為它們原來的狀態只要您事先沒有與數據庫斷開則您在執行回滾之前所做的任何修改都將被撤銷您還可以設置一個保存點以便將事務回滾至該特定的點同時保持事務中的其他語句原封不動

  使用數據庫事務(主要針對)

  您可以使用 OracleTransaction 類的一個對象來表示一個事務OracleTransaction 類包含多個屬性其中的兩個為 Connection(指定與事務關聯的數據庫連接)和 IsolationLevel(指定事務隔離級別)

  Connection指定與該事務關聯的OracleConnection對象
  IsolationLevel指定該事務的IsolationLevel枚舉類型用於對事物的鎖定取值有ChaosReadCommitedReadUncommitedRepeatableReadSerializableUnspecified

  應用程序通過針對OracleConnection對象調用 BeginTransaction 來創建OracleTransaction對象對OracleTransaction對象執行與該事務關聯的所有後續操作(例如提交或中止該事務)

  Commit:提交SQL數據庫事務
  Rollback :從掛起狀態回滾事務

  您還可以使用 Save() 在事務中設置一個保存點

  下面的示例創建一個 OracleConnection 和一個 OracleTransaction它還演示了如何使用 BeginTransactionCommit 和 Rollback 方法(這是MSDN裡的范例)

  需要注意的是這些操作需要引入命名空間: OracleDataAcessClient

  OracleDataAccessClient 命名空間是 ODPNET 的一部分它包含許多類其中有 OracleConnectionOracleCommand 和 OracleTransaction示例程序就用到了這些類

  事務操作

Public Sub RunOracleTransaction()Sub RunOracleTransaction(myConnString As String)
Dim myConnection As New OracleConnection(myConnString)
myConnectionOpen()

Dim myCommand As OracleCommand = myConnectionCreateCommand()
Dim myTrans As OracleTransaction

Start a local transaction
myTrans = myConnectionBeginTransaction(IsolationLevelReadCommitted)
Assign transaction object for a pending local transaction
myCommandTransaction = myTrans

Try
myCommandCommandText = INSERT INTO Dept (DeptNo Dname Loc) values ( TECHNOLOGY DENVER)
myCommandExecuteNonQuery()
myCommandCommandText = INSERT INTO Dept (DeptNo Dname Loc) values ( ENGINEERING KANSAS CITY)
myCommandExecuteNonQuery()
myTransCommit()
ConsoleWriteLine(Both records are written to database)
Catch e As Exception
myTransRollback()
ConsoleWriteLine(eToString())
ConsoleWriteLine(Neither record was written to database)
Finally
myConnectionClose()
End Try
End Sub

  在 NET 程序中設置事務保存點

  正如本文前面所提到的那樣您可以設置一個保存點以便將事務回滾至該特定的點同時保持事務中的其他語句原封不動您可以使用 OracleTransaction 類的 Save() 方法在事務中設置保存點

  如果您有一個非常長的事務並且希望能夠僅回滾到某個特定的時間點那麼您可能要使用保存點例如您可能想對 個產品做一些更改然後設置一個保存點然後再對另 個產品做更改如果您在進行第二批更改時出現了錯誤那麼您可以回滾至保存點使您的第一批更改原封不動

  使用OracleTransaction對象需要注意的幾點

  )你需要在你整個事務執行中只能有唯一OracleConnection OracleCommand

  OracleTransaction也就是說如果你事務處理過程中如果需要與數據庫的操作都只能在這唯一的Command中執行類似於:

imgCommandCommandText = sSQL
imgCommandExecuteNonQuery()或其他操作
  若你新建一個連接執行其他數據庫操作的話整個事務過程就會拋出異常

  )如果你需要在你SQL語句中加入參數則你必須在你執行完提交或相關數據庫操作之後將其Command的參數清空下邊舉一個實際的項目裡的事務函數

  事務函數

<summary>
保存熱點文本文件信息到數據庫
</summary>
Private Function SaveTextFile()Function SaveTextFile() As Boolean
Dim sSQl As String
sSQl = select type_id from sys_file_type where file_extname=TXT
Try
imgCommandCommandText = sSQl
Dim typeID As Int = ConvertToInt(imgCommandExecuteScalar()) 文件類型
讀取文本信息
Dim Textblob() As Byte = GetText()

sSQl = insert into t_watch_textcontent(image_idtext_contenttype_id) values(:imageid:textcontent:typeid)
增添SQL參數
Dim Param As OracleClientOracleParameter
Param = New OracleClientOracleParameter(imageid sNewImageID)
imgCommandParametersAdd(Param)
Param = New OracleClientOracleParameter(textcontent Textblob)
imgCommandParametersAdd(Param)
Param = New OracleClientOracleParameter(typeid typeID)
imgCommandParametersAdd(Param)

提交信息
imgCommandCommandText = sSQl
If imgCommandExecuteNonQuery() > Then
bResult = True
關鍵是這裡需要你手動清除參數
imgCommandParametersClear()
End If
Catch ex As Exception
MeExceptionMessage = ex
bResult = False
End Try

Return bResult
End Function


From:http://tw.wingwit.com/Article/program/net/201311/12778.html
  • 上一篇文章:

  • 下一篇文章:
  • 推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.