新聞中心
VB.NET事務(wù)處理的操作方法可以有很多種,我們?cè)?jīng)也為大家介紹過(guò)一些實(shí)用的方法,那么今天將會(huì)給大家?guī)?lái)的是通過(guò)OracleTransaction來(lái)實(shí)現(xiàn)的VB.NET事務(wù)處理相關(guān)操作,希望可以對(duì)大家有所幫助。#t#

專(zhuān)注于為中小企業(yè)提供網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計(jì)服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)江城免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了上千企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過(guò)網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。
有關(guān)數(shù)據(jù)庫(kù)事務(wù)是由一組 SQL 語(yǔ)句組成的一個(gè)邏輯工作單元。您可以把事務(wù)看作是一組不可分的 SQL 語(yǔ)句,這些語(yǔ)句作為一個(gè)整體永久記錄在數(shù)據(jù)庫(kù)中或一并撤銷(xiāo)。比如在銀行帳戶之間轉(zhuǎn)移資金:一條 UPDATE語(yǔ)句將從一個(gè)帳戶的資金總數(shù)中減去一部分,另一條 UPDATE語(yǔ)句將把資金加到另一個(gè)帳戶中。減操作和加操作必須永久記錄在數(shù)據(jù)庫(kù)中,或者必須一并撤銷(xiāo) — 否則將損失資金。這個(gè)簡(jiǎn)單的示例僅使用了兩條 UPDATE 語(yǔ)句,但一個(gè)更實(shí)際的事務(wù)可能包含許多 INSERT、UPDATE和 DELETE 語(yǔ)句。
要永久記錄一個(gè)事務(wù)中的 SQL 語(yǔ)句的結(jié)果,您可以通過(guò) COMMIT 語(yǔ)句來(lái)執(zhí)行提交。要撤銷(xiāo) SQL 語(yǔ)句的結(jié)果,您可以使用 ROLLBACK 語(yǔ)句來(lái)執(zhí)行回滾,這會(huì)把所有的行重設(shè)為它們?cè)瓉?lái)的狀態(tài)。只要您事先沒(méi)有與數(shù)據(jù)庫(kù)斷開(kāi),則您在執(zhí)行回滾之前所做的任何修改都將被撤銷(xiāo)。您還可以設(shè)置一個(gè)保存點(diǎn),以便將事務(wù)回滾至該特定的點(diǎn),同時(shí)保持事務(wù)中的其他語(yǔ)句原封不動(dòng)。
VB.NET事務(wù)處理中如何使用數(shù)據(jù)庫(kù)事務(wù)(主要針對(duì)VB.NET)
您可以使用 OracleTransaction 類(lèi)的一個(gè)對(duì)象來(lái)表示一個(gè)事務(wù)。OracleTransaction 類(lèi)包含多個(gè)屬性,其中的兩個(gè)為 Connection(指定與事務(wù)關(guān)聯(lián)的數(shù)據(jù)庫(kù)連接)和 IsolationLevel(指定事務(wù)隔離級(jí)別)
Connection,指定與該事務(wù)關(guān)聯(lián)的OracleConnection對(duì)象;
IsolationLevel,指定該事務(wù)的IsolationLevel;枚舉類(lèi)型,用于對(duì)事物的鎖定,取值有Chaos、ReadCommited、ReadUncommited、RepeatableRead、Serializable、Unspecified。
應(yīng)用程序通過(guò)針對(duì)OracleConnection對(duì)象調(diào)用 BeginTransaction 來(lái)創(chuàng)建OracleTransaction對(duì)象。對(duì)OracleTransaction對(duì)象執(zhí)行與該事務(wù)關(guān)聯(lián)的所有后續(xù)操作(例如提交或中止該事務(wù))
Commit:提交SQL數(shù)據(jù)庫(kù)事務(wù);
Rollback :從掛起狀態(tài)回滾事務(wù);
您還可以使用 Save() 在事務(wù)中設(shè)置一個(gè)保存點(diǎn)。
下面的示例創(chuàng)建一個(gè) OracleConnection 和一個(gè) OracleTransaction。它還演示了如何使用 BeginTransaction、Commit 和 Rollback 方法。(這是MSDN里的范例)
需要注意的是,這些VB.NET事務(wù)處理操作需要引入命名空間: Oracle.DataAcess.Client
Oracle.DataAccess.Client 命名空間是 ODP.NET 的一部分,它包含許多類(lèi),其中有 OracleConnection、OracleCommand 和 OracleTransaction。示例程序就用到了這些類(lèi)。
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ù)保存點(diǎn)
正如本文前面所提到的那樣,您可以設(shè)置一個(gè)保存點(diǎn),以便將事務(wù)回滾至該特定的點(diǎn),同時(shí)保持事務(wù)中的其他語(yǔ)句原封不動(dòng)。您可以使用 OracleTransaction 類(lèi)的 Save() 方法在事務(wù)中設(shè)置保存點(diǎn)。
如果您有一個(gè)非常長(zhǎng)的事務(wù)并且希望能夠僅回滾到某個(gè)特定的時(shí)間點(diǎn),那么您可能要使用保存點(diǎn)。例如,您可能想對(duì) 10 個(gè)產(chǎn)品做一些更改,然后設(shè)置一個(gè)保存點(diǎn),然后再對(duì)另 10 個(gè)產(chǎn)品做更改;如果您在進(jìn)行第二批更改時(shí)出現(xiàn)了錯(cuò)誤,那么您可以回滾至保存點(diǎn),使您的第一批更改原封不動(dòng)。
使用OracleTransaction對(duì)象進(jìn)行VB.NET事務(wù)處理需要注意的幾點(diǎn):
1)你需要在你整個(gè)事務(wù)執(zhí)行中只能有唯一OracleConnection ,OracleCommand,OracleTransaction,也就是說(shuō)如果你事務(wù)處理過(guò)程中如果需要與數(shù)據(jù)庫(kù)的操作都只能在這唯一的Command中執(zhí)行,類(lèi)似于:
imgCommand.CommandText = sSQL
imgCommand.ExecuteNonQuery()或其他操作
若你新建一個(gè)連接執(zhí)行其他數(shù)據(jù)庫(kù)操作的話,整個(gè)事務(wù)過(guò)程就會(huì)拋出異常
2)如果你需要在你SQL語(yǔ)句中加入?yún)?shù),則你必須在你執(zhí)行完提交或相關(guān)數(shù)據(jù)庫(kù)操作之后將其Command的參數(shù)清空,下邊舉一個(gè)實(shí)際的項(xiàng)目里的事務(wù)函數(shù):
事務(wù)函數(shù)
- ''' < summary> '''
保存熱點(diǎn)文本文件信息到數(shù)據(jù)庫(kù) '''- < /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())- '文件類(lèi)型 '讀取文本信息
- 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)鍵是這里,需要你手動(dòng)清除參數(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)操作方法就為大家介紹到這里。
新聞名稱(chēng):VB.NET事務(wù)處理簡(jiǎn)單方法推薦
分享URL:http://www.5511xx.com/article/cdcedcj.html


咨詢(xún)
建站咨詢(xún)
