VB.NET中運用OracleTransaction處置事務。本站提示廣大學習愛好者:(VB.NET中運用OracleTransaction處置事務)文章只能為提供參考,不一定能成為您想要的結果。以下是VB.NET中運用OracleTransaction處置事務正文
數據庫事務簡介
數據庫事務是由一組SQL語句組成的一個邏輯任務單元。您可以把事務看作是一組不可分的SQL語句,這些語句作為一個全體永世記載在數據庫中或一並撤銷。比方在銀行帳戶之間轉移資金:一條UPDATE語句將從一個帳戶的資金總數中減去一局部,另一條UPDATE語句將把資金加到另一個帳戶中。減操作和加操作必需永世記載在數據庫中,或許必需一並撤銷 — 否則將損失資金。這個復雜的示例僅運用了兩條UPDATE語句,但一個更實踐的事務能夠包括許多INSERT、UPDATE和DELETE 語句。
要永世記載一個事務中的SQL語句的後果,您可以經過 COMMIT 語句來執行提交。要撤銷SQL語句的後果,您可以運用ROLLBACK語句來執行回滾,這會把一切的行重設為它們原來的形態。只需您事前沒有與數據庫斷開,則您在執行回滾之前所做的任何修正都將被撤銷。您還可以設置一個保管點,以便將事務回滾至該特定的點,同時堅持事務中的其他語句原封不動。
運用數據庫事務(次要針對VB.net)
您可以運用OracleTransaction類的一個對象來表示一個事務。OracleTransaction類包括多個屬性,其中的兩個為 Connection(指定與事務關聯的數據庫銜接)和 IsolationLevel(指定事務隔離級別)
Connection,指定與該事務關聯的OracleConnection對象;
IsolationLevel,指定該事務的IsolationLevel;枚舉類型,用於對事物的鎖定,取值有Chaos、ReadCommited、ReadUncommited、RepeatableRead、Serializable、Unspecified。
使用順序經過針對OracleConnection對象調用 BeginTransaction 來創立OracleTransaction對象。對OracleTransaction對象執行與該事務關聯的一切後續操作(例如提交或中止該事務)。
Commit:提交SQL數據庫事務;
Rollback :從掛起形態回滾事務;
您還可以運用 Save() 在事務中設置一個保管點。
上面的示例創立一個 OracleConnection 和一個 OracleTransaction。它還演示了如何運用 BeginTransaction、Commit 和 Rollback 辦法。(這是MSDN裡的范例)
需求留意的是,這些操作需求引入命名空間: Oracle.DataAcess.Client
Oracle.DataAccess.Client 命名空間是 ODP.NET 的一局部,它包括許多類,其中有 OracleConnection、OracleCommand 和 OracleTransaction。示例順序就用到了這些類。
事務操作
1Public Sub RunOracleTransaction()Sub RunOracleTransaction(myConnString As String)
2 Dim myConnection As New OracleConnection(myConnString)
3 myConnection.Open()
4
5 Dim myCommand As OracleCommand = myConnection.CreateCommand()
6 Dim myTrans As OracleTransaction
7
8 ' Start a local transaction
9 myTrans = myConnection.BeginTransaction(IsolationLevel.ReadCommitted)
10 ' Assign transaction object for a pending local transaction
11 myCommand.Transaction = myTrans
12
13 Try
14 myCommand.CommandText = "INSERT INTO Dept (DeptNo, Dname, Loc) values (50, 'TECHNOLOGY', 'DENVER')"
15 myCommand.ExecuteNonQuery()
16 myCommand.CommandText = "INSERT INTO Dept (DeptNo, Dname, Loc) values (60, 'ENGINEERING', 'KANSAS CITY')"
17 myCommand.ExecuteNonQuery()
18 myTrans.Commit()
19 Console.WriteLine("Both records are written to database.")
20 Catch e As Exception
21 myTrans.Rollback()
22 Console.WriteLine(e.ToString())
23 Console.WriteLine("Neither record was written to database.")
24 Finally
25 myConnection.Close()
26 End Try
27End Sub
28
在.NET順序中設置事務保管點
正如本文後面所提到的那樣,您可以設置一個保管點,以便將事務回滾至該特定的點,同時堅持事務中的其他語句原封不動。您可以運用 OracleTransaction 類的 Save() 辦法在事務中設置保管點。
假如您有一個十分長的事務並且希望可以僅回滾到某個特定的時間點,那麼您能夠要運用保管點。例如,您能夠想對 10 個產品做一些更改,然後設置一個保管點,然後再對另 10 個產品做更改;假如您在停止第二批更改時呈現了錯誤,那麼您可以回滾至保管點,使您的第一批更改原封不動。
運用OracleTransaction對象需求留意的幾點:
1)你需求在你整個事務執行中只能有獨一OracleConnection ,OracleCommand,
OracleTransaction,也就是說假如你事務處置進程中假如需求與數據庫的操作都只能在這獨一的Command中執行,相似於:
imgCommand.CommandText = sSQL
imgCommand.ExecuteNonQuery()或其他操作
若你新建一個銜接執行其他數據庫操作的話,整個事務進程就會拋出異常
2)假如你需求在你SQL語句中參加參數,則你必需在你執行完提交或相關數據庫操作之後將其Command的參數清空,下邊舉一個實踐的項目裡的事務函數:
事務函數
1 ''' <summary>
2 ''' 保管熱點文本文件信息到數據庫
3 ''' </summary>
4 Private Function SaveTextFile()Function SaveTextFile() As Boolean
5 Dim sSQl As String
6 sSQl = "select type_id from sys_file_type where file_extname='TXT'"
7 Try
8 imgCommand.CommandText = sSQl
9 Dim typeID As Int32 = Convert.ToInt32(imgCommand.ExecuteScalar()) '文件類型
10 '讀取文本信息
11 Dim Textblob() As Byte = GetText()
12
13 sSQl = "insert into t_watch_textcontent(image_id,text_content,type_id) values(:imageid,:textcontent,:typeid)"
14 '增添SQL參數
15 Dim Param As OracleClient.OracleParameter
16 Param = New OracleClient.OracleParameter("imageid", sNewImageID)
17 imgCommand.Parameters.Add(Param)
18 Param = New OracleClient.OracleParameter("textcontent", Textblob)
19 imgCommand.Parameters.Add(Param)
20 Param = New OracleClient.OracleParameter("typeid", typeID)
21 imgCommand.Parameters.Add(Param)
22
23 '提交信息
24 imgCommand.CommandText = sSQl
25 If imgCommand.ExecuteNonQuery() > 0 Then
26 bResult = True
27 '關鍵是這裡,需求你手動肅清參數
28 imgCommand.Parameters.Clear()
29 End If
30 Catch ex As Exception
31 Me.ExceptionMessage = ex
32 bResult = False
33 End Try
34
35 Return bResult
36 End Function