VB.NET事務(wù)處理簡單方法推薦
VB.NET事務(wù)處理的操作方法可以有很多種,我們曾經(jīng)也為大家介紹過一些實用的方法,那么今天將會給大家?guī)淼氖峭ㄟ^OracleTransaction來實現(xiàn)的VB.NET事務(wù)處理相關(guān)操作,希望可以對大家有所幫助。#t#
有關(guān)數(shù)據(jù)庫事務(wù)是由一組 SQL 語句組成的一個邏輯工作單元。您可以把事務(wù)看作是一組不可分的 SQL 語句,這些語句作為一個整體永久記錄在數(shù)據(jù)庫中或一并撤銷。比如在銀行帳戶之間轉(zhuǎn)移資金:一條 UPDATE語句將從一個帳戶的資金總數(shù)中減去一部分,另一條 UPDATE語句將把資金加到另一個帳戶中。減操作和加操作必須永久記錄在數(shù)據(jù)庫中,或者必須一并撤銷 — 否則將損失資金。這個簡單的示例僅使用了兩條 UPDATE 語句,但一個更實際的事務(wù)可能包含許多 INSERT、UPDATE和 DELETE 語句。
要永久記錄一個事務(wù)中的 SQL 語句的結(jié)果,您可以通過 COMMIT 語句來執(zhí)行提交。要撤銷 SQL 語句的結(jié)果,您可以使用 ROLLBACK 語句來執(zhí)行回滾,這會把所有的行重設(shè)為它們原來的狀態(tài)。只要您事先沒有與數(shù)據(jù)庫斷開,則您在執(zhí)行回滾之前所做的任何修改都將被撤銷。您還可以設(shè)置一個保存點,以便將事務(wù)回滾至該特定的點,同時保持事務(wù)中的其他語句原封不動。
VB.NET事務(wù)處理中如何使用數(shù)據(jù)庫事務(wù)(主要針對VB.NET)
您可以使用 OracleTransaction 類的一個對象來表示一個事務(wù)。OracleTransaction 類包含多個屬性,其中的兩個為 Connection(指定與事務(wù)關(guān)聯(lián)的數(shù)據(jù)庫連接)和 IsolationLevel(指定事務(wù)隔離級別)
Connection,指定與該事務(wù)關(guān)聯(lián)的OracleConnection對象;
IsolationLevel,指定該事務(wù)的IsolationLevel;枚舉類型,用于對事物的鎖定,取值有Chaos、ReadCommited、ReadUncommited、RepeatableRead、Serializable、Unspecified。
應(yīng)用程序通過針對OracleConnection對象調(diào)用 BeginTransaction 來創(chuàng)建OracleTransaction對象。對OracleTransaction對象執(zhí)行與該事務(wù)關(guān)聯(lián)的所有后續(xù)操作(例如提交或中止該事務(wù))
Commit:提交SQL數(shù)據(jù)庫事務(wù);
Rollback :從掛起狀態(tài)回滾事務(wù);
您還可以使用 Save() 在事務(wù)中設(shè)置一個保存點。
下面的示例創(chuàng)建一個 OracleConnection 和一個 OracleTransaction。它還演示了如何使用 BeginTransaction、Commit 和 Rollback 方法。(這是MSDN里的范例)
需要注意的是,這些VB.NET事務(wù)處理操作需要引入命名空間: Oracle.DataAcess.Client
Oracle.DataAccess.Client 命名空間是 ODP.NET 的一部分,它包含許多類,其中有 OracleConnection、OracleCommand 和 OracleTransaction。示例程序就用到了這些類。
VB.NET事務(wù)處理的事務(wù)操作
- Public Sub RunOracleTransaction()
- Sub RunOracleTransaction
(myConnString As String)- Dim myConnection As New
OracleConnection(myConnString)
myConnection.Open()- Dim myCommand As OracleCommand
= myConnection.CreateCommand()- Dim myTrans As OracleTransaction
' Start a local transaction- myTrans = myConnection.Begin
Transaction(IsolationLevel.
ReadCommitted)- ' Assign transaction object for
a pending local transaction- myCommand.Transaction = myTrans Try
- myCommand.CommandText = "INSERT
INTO Dept (DeptNo, Dname, Loc)- values (50, 'TECHNOLOGY', 'DENVER')"
- myCommand.ExecuteNonQuery()
- myCommand.CommandText = "INSERT
INTO Dept (DeptNo, Dname, Loc)- values (60, 'ENGINEERING',
'KANSAS CITY')"- myCommand.ExecuteNonQuery()
- myTrans.Commit()
- Console.WriteLine("Both
records are written to database.")- Catch e As Exception
myTrans.Rollback()- Console.WriteLine(e.ToString())
- Console.WriteLine("Neither
record was written to database.")- Finally
- myConnection.Close()
- End Try
- End Sub
在 .NET 程序中設(shè)置事務(wù)保存點
正如本文前面所提到的那樣,您可以設(shè)置一個保存點,以便將事務(wù)回滾至該特定的點,同時保持事務(wù)中的其他語句原封不動。您可以使用 OracleTransaction 類的 Save() 方法在事務(wù)中設(shè)置保存點。
如果您有一個非常長的事務(wù)并且希望能夠僅回滾到某個特定的時間點,那么您可能要使用保存點。例如,您可能想對 10 個產(chǎn)品做一些更改,然后設(shè)置一個保存點,然后再對另 10 個產(chǎn)品做更改;如果您在進行第二批更改時出現(xiàn)了錯誤,那么您可以回滾至保存點,使您的第一批更改原封不動。
使用OracleTransaction對象進行VB.NET事務(wù)處理需要注意的幾點:
1)你需要在你整個事務(wù)執(zhí)行中只能有唯一OracleConnection ,OracleCommand,OracleTransaction,也就是說如果你事務(wù)處理過程中如果需要與數(shù)據(jù)庫的操作都只能在這唯一的Command中執(zhí)行,類似于:
imgCommand.CommandText = sSQL
imgCommand.ExecuteNonQuery()或其他操作
若你新建一個連接執(zhí)行其他數(shù)據(jù)庫操作的話,整個事務(wù)過程就會拋出異常
2)如果你需要在你SQL語句中加入?yún)?shù),則你必須在你執(zhí)行完提交或相關(guān)數(shù)據(jù)庫操作之后將其Command的參數(shù)清空,下邊舉一個實際的項目里的事務(wù)函數(shù):
事務(wù)函數(shù)
- ''' < summary> '''
保存熱點文本文件信息到數(shù)據(jù)庫 '''- < /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 imgCommand.CommandText = sSQl
- Dim typeID As Int32 = Convert.
ToInt32(imgCommand.ExecuteScalar())- '文件類型 '讀取文本信息
- Dim Textblob() As Byte = GetText()
- sSQl = "insert
- into t_watch_textcontent
(image_id,text_content,type_id)- values(:imageid,:textcontent,:typeid)"
- '增添SQL參數(shù) Dim Param As
OracleClient.OracleParameter- Param = New OracleClient.
OracleParameter("imageid", sNewImageID)- imgCommand.Parameters.Add(Param)
- Param = New OracleClient.
OracleParameter("textcontent", Textblob)- imgCommand.Parameters.Add(Param)
- Param = New OracleClient.
OracleParameter("typeid", typeID)- imgCommand.Parameters.Add(Param)
- '提交信息 imgCommand.CommandText = sSQl
- If imgCommand.ExecuteNonQuery() > 0
- Then bResult = True
- '關(guān)鍵是這里,需要你手動清除參數(shù)
- imgCommand.Parameters.Clear()
- End If
- Catch ex As Exception
Me.ExceptionMessage = ex- bResult = False
- End
- Try Return bResult
- End Function
VB.NET事務(wù)處理的相關(guān)操作方法就為大家介紹到這里。