事務是指作為單個邏輯工作單元執行的一系列操作。
10年積累的成都做網站、成都網站設計經驗,可以快速應對客戶對網站的新想法和需求。提供各種問題對應的解決方案。讓選擇我們的客戶得到更好、更有力的網絡服務。我雖然不認識你,你也不認識我。但先網站制作后付款的網站建設流程,更有賓縣免費網站建設讓你可以放心的選擇與我們合作。
事務處理可以確保除非事務性單元內的所有操作都成功完成,否則不會永久更新面向數據的資源。通過將一組相關操作組合為一個要么全部成功要么全部失敗的單元,可以簡化錯誤恢復并使應用程序更加可靠。一個邏輯工作單元要成為事務,必須滿足所謂的ACID(原子性、一致性、隔離性和持久性)屬性:
· 原子性
事務必須是原子工作單元;對于其數據修改,要么全都執行,要么全都不執行。通常,與某個事務關聯的操作具有共同的目標,并且是相互依賴的。如果系統只執行這些操作的一個子集,則可能會破壞事務的總體目標。原子性消除了系統處理操作子集的可能性。
· 一致性
事務在完成時,必須使所有的數據都保持一致狀態。在相關數據庫中,所有規則都必須應用于事務的修改,以保持所有數據的完整性。事務結束時,所有的內部數據結構(如 B 樹索引或雙向鏈表)都必須是正確的。某些維護一致性的責任由應用程序開發人員承擔,他們必須確保應用程序已強制所有已知的完整性約束。例如,當開發用于轉帳的應用程序時,應避免在轉帳過程中任意移動小數點。
· 隔離性
由并發事務所作的修改必須與任何其它并發事務所作的修改隔離。事務查看數據時數據所處的狀態,要么是另一并發事務修改它之前的狀態,要么是另一事務修改它之后的狀態,事務不會查看中間狀態的數據。這稱為可串行性,因為它能夠重新裝載起始數據,并且重播一系列事務,以使數據結束時的狀態與原始事務執行的狀態相同。當事務可序列化時將獲得最高的隔離級別。在此級別上,從一組可并行執行的事務獲得的結果與通過連續運行每個事務所獲得的結果相同。由于高度隔離會限制可并行執行的事務數,所以一些應用程序降低隔離級別以換取更大的吞吐量。
· 持久性
事務完成之后,它對于系統的影響是永久性的。該修改即使出現致命的系統故障也將一直保持。
Oracle.DataAccess.Client 命名空間是 ODP.NET 的一部分,它包含許多類,其中有OracleConnection、OracleCommand 和 OracleTransaction。示例程序用到了這些類。 VB.NET使用ORACLR第 1 步創建一個 OracleConnection 對象連接到 Oracle 數據庫,然后打開該連接。
在C# 中:OracleConnection myOracleConnection =new OracleConnection( "User Id=store;Password=store;Data Source=ORCL" ); myOracleConnection.Open(); 在VB.NET 中:Dim myOracleConnection As New OracleConnection( _ "User Id=store;Password=store;Data Source=ORCL") myOracleConnection.Open() User Id 和 Password 屬性指定了您所要連接到的模式的數據庫用戶和口令。Data Source 屬性指定了數據庫的 Oracle Net 服務名稱;初始數據庫的默認服務名稱為 ORCL。如果您使用的不是初始數據庫,或者您的服務名稱不同,那么您需要在程序中修改 Data Source 屬性的設置。 VB.NET使用ORACLR第 2 步創建一個 OracleTransaction 對象,然后調用 OracleConnection 對象的 BeginTransaction() 方法啟動事務。 在C# 中:OracleTransaction myOracleTransaction = myOracleConnection.BeginTransaction(); In VB.NET: Dim myOracleTransaction As OracleTransaction = _ myOracleConnection.BeginTransaction() VB.NET使用ORACLR第3 步創建一個 OracleCommand 對象,用于存儲 SQL 語句。 在C# 中:OracleCommand myOracleCommand = myOracleConnection.CreateCommand(); 在VB.NET 中:Dim myOracleCommand As OracleCommand = myOracleConnection.CreateCommand 因為OracleCommand 對象使用 OracleConnection 對象的 CreateCommand() 方法創建的,所以它自動使用在第 2 步中為 OracleConnection 對象設置的事務。 VB.NET使用ORACLR第 4 步將OracleCommand 對象的 CommandText 屬性設為向表 product_types 中添加一行的第一條 INSERT 語句。
在C# 中:myOracleCommand.CommandText = "INSERT INTO product_types (" + " product_type_id, name" + ") VALUES (" + " 3, 'Magazine'" + ")"; 在VB.NET 中:myOracleCommand.CommandText = _ "INSERT INTO product_types (" _ " product_type_id, name" _ ") VALUES (" _ " 3, 'Magazine'" _ ")" VB.NET使用ORACLR第 5 步
使用OracleCommand 對象的 ExecuteNonQuery() 方法運行 INSERT 語句。
在C# 中:myOracleCommand.ExecuteNonQuery(); 在VB.NET 中:myOracleCommand.ExecuteNonQuery(); VB.NET使用ORACLR第 6 和第 7 步將OracleCommand 對象的 CommandText 屬性設為向表 Products 中添加一行的第二條 INSERT 語句,并運行它。
在C# 中:myOracleCommand.CommandText = "INSERT INTO products (" + " product_id, product_type_id, name, description, price" + ") VALUES (" + " 5, 3, 'Oracle Magazine', 'Magazine about Oracle', 4.99" + ")"; myOracleCommand.ExecuteNonQuery(); 在VB.NET 中:myOracleCommand.CommandText = _ "INSERT INTO products (" _ " product_id, product_type_id, name, description, price" _ ") VALUES (" _ " 5, 3, 'Oracle Magazine', 'Magazine about Oracle', 4.99" _ ")" myOracleCommand.ExecuteNonQuery() VB.NET使用ORACLR第 8 步使用OracleTransaction 對象的 Commit() 方法提交數據庫中的事務。
在C# 中:myOracleTransaction.Commit(); 在VB.NET 中:myOracleTransaction.Commit() 在完成 Commit() 方法之后,由 INSERT 語句添加的兩行將在數據庫中永久記錄。 VB.NET使用ORACLR第 9 步使用Close() 方法關閉 OracleConnection 對象。在C# 中:myOracleConnection.Close(); 在VB.NET 中: myOracleConnection.Close() 編譯并運行示例程序要編譯 C# 示例程序,您可以使用 csc 命令運行 C# 編譯器。因為程序使用 Oracle Data Access DLL,所以您應使用 /r 選項指定該 DLL 的完整路徑,例如:注意:您需要用您計算機上的相應路徑來替換該 DLL 的路徑。此外,如果您的計算機找不到 csc 編譯器,那么您可能需要運行 Microsoft sdkvars.bat 腳本來首先設置 .NET SDK 的環境變量;您可以在安裝 .NET SDK 的 bin 目錄中找到該腳本。 如果您遇到以下錯誤:Example1.cs(10,7):error CS0246:The type or namespace name 'Oracle' could not be found (are you missing a using directive or an assembly reference?) 這說明您沒有在編譯命令中正確指定 Oracle Data Access DLL。(有關設置的信息,請參閱 John Paul Cook 的技術文章“在 Oracle 數據庫上構建 .NET 應用程序”。) 下面是用于編譯 VB.NET 程序的等價命令:vbc TransExample1.vb /r:C:\oracle\product\10.1.0\ Client_1\bin\Oracle.DataAccess.dll /r:system.dll /r:system.data.dll 接下來,輸入以下命令,運行示例: An exception was thrown Message = ORA-12514:TNS:listener does not currently know of service requested in connect descriptor 您將看到程序的輸出。不過,如果您遇到類似以下的異常這說明 OracleConnection 對象的連接字符串中的 Data Source 的設置不正確。您應當咨詢您的 DBA 或查閱 Oracle Net 文檔以獲得更多詳細信息。 如果您使用的是 VS .NET,那么您可以遵循以下指示來編譯和運行 C# 程序 TransExample1.cs:
創建一個新的 C# 控制臺應用程序。FileNew Project,然后選擇 Visual C# Projects,Console Application。
1. 什么是類和對象?
答:類包含某一類對象的數據和過程。對象是類的實例。
2. 為什么采用類和對象進行程序設計?
答:以便按照對象定義類,提高程序代碼的可重用性,避免重復勞動。
3. 在同一個類中,應當包括哪些對象的屬性和方法?
答:同一類對象的數據和過程。
4. VB程序設計主要包括哪兩個方面的內容?
答:Windows應用程序界面和代碼。
5. 什么是事件驅動?
答:根據事件轉去執行相應的事件處理過程。
1. 控件是窗體上的 對象 。
2. Visual Basic具有 BASIC程序語言簡單易學的 優點,新增了 可視化和面向面向對象程序設計的 熱點,是 Windows編程人員廣泛使用的編程 工具。
3. 對象的 屬性 是在其類中定義的數據。
4. 對象的 方法 是在其類中定義的過程。
5. 對象本身的動作或功能稱為 方法 ,外界施加于某對象的動作或操作稱為 事件 。
1.面向過程
是指從功能的角度分析問題,將待解決的問題空間分解成若干個功能模塊,每個功能模塊描述一個操作的具體過程。
2.面向過程程序設計
主要是根據事務本身的邏輯過程進行編程的一種方法。
3.面向對象程序設計
是一種計算機編程架構,是由單個能夠起到子程序作用的單元或對象組合而成。即按照對象編寫程序。
4.事件驅動程序設計
是一種電腦程式設計模型。這種模型的程式執行流程是由使用者的動作或者是由其他程式的訊息來決定的。
5.函數
是一種特定的運算,在程序中使用一個函數時,只要給出函數名并給出一個或多個參數,就能得到它的函數值
6.過程
是程序中可以執行的一段代碼,過程包含在一個聲明語句和一個結束語句之間
7.類
是所有具有共同特征的事物的抽象,是一個抽象的概念(類是一組具有相同屬性特征的對象的抽象描述,是面向對象程序設計的又一個核心概念或者類是對一組對象共同具有的屬性和行為的抽象,具有封裝和隱藏性、還具有繼承性)。
8.對象
是一個屬性集合及其操作的封裝體(對象是用來描述現實世界中客體的部件,是面向對象軟件系統在運行時刻的基本單位)。
類是對象的抽象,對象是類的實例。
9.事件
窗體或控件識別的動作
10.事件驅動
根據事件轉去執行相應的事件處理過程。
11.屬性
是一個對象的特性,不同的對象有不同的屬性
12.算法
指解決某個問題的嚴格方法,描述有始有終的計算過程。
5.屬性窗口中屬性值被設置的方式有哪幾種?
6種:輸入 選取 瀏覽 賦值 默認 拖動
1.程序代碼是由一行一行的 語句 所組成。
3.在程序代碼中可將一個語句分成兩段的特殊符號為( _ )。
5.數值變量如果沒有設置初值,則內定值為 0 。
7.如果有一個變量,可能會存放數值數據或字符串數據,此時可以聲明該變量為 對象變量。
9. Integer數據類型占 4 bytes的內存空間,可以表示的數值范圍為 -2,147,483,648~2,147,483,647 的整數
3.VB.NET程序語言數據類型的種類有哪些?
(1)數值型
①整形數:短整形(Short)、整形(Integer)、長整型(Long)
②字節型(Byte)
③實型數:單精度型(Single)、雙精度型(Double)
④貨幣型(Decimal)
(2)字符型(Char)和字符串型(String)
(3)邏輯型/布爾型(Boolean)
(4)日期型(Date)
(5)對象型(Object)[即可變型(Variant)]
1.局部變量、全局變量、跨模塊變量分別在何處聲明?其生存期分別是多少?
局部變量在程序內聲明。生存期為從所在的程序運行開始到程序結束。
全局變量在窗體內所有程序的外邊聲明。生存期為由該變量聲明開始,一直到程序退出運行為止。
跨模塊變量在一般模塊的聲明區用Public來聲明。生存期為從一個Windows應用程序項目文件開始運行到結束。
3.什么是靜態變量?
靜態變量是在離開程序時能夠繼續保留目前的值,待下回進入該程序時能夠繼續保留的變量值的局部變量,用Static關鍵字聲明。
(一)問答題
1.請簡單說明在程序中使用程序的好處。
(1)程序可以重復使用,以方便維護與程序調試。
(2)程序可以讓其他工程或項目使用。
(3)程序的邏輯簡單、明確,可以讓程序變得簡單且可讀性高。
(4)程序具有模塊化的功能,因此可以將一個大的應用程序分成數個小的且不同功能的程序,讓不同的程序設計師分別編寫獨立不同功能的程序,并以團隊開發,加快應用程序開發的時間。
3.試比較傳值調用與傳址調用的差異。
(1)聲明方式不同:
傳值——在程序中的虛自變量之前加上ByVal
傳址——在程序中的虛自變量之前加上ByRef
(2)占用內存不同
傳值——調用程序的實自變量與被調用程序的虛自變量占用不同內存
傳址——調用程序的實自變量與被調用程序的虛自變量占用同一地址的內存,也就是說,在做參數傳遞時,調用程序中的實自變量是將自己本身的內存地址傳給被調用程序的虛自變量
(3)虛自變量更改結果不同
傳值——使用傳值調用可以防止變量被程序修改
傳址——被調用程序可以通過虛自變量將值傳回給調用程序
5.什么是程序多載?
程序多載是使用不同的自變量串行或數據類型來加以區分相同名稱的程序。
事務處理是在數據處理時經常遇到的問題,經常用到的方法有以下3種總結整理如下:
方法1:直接寫入到sql?中
在存儲過程中使用?BEGIN?TRANS,?COMMIT?TRANS,?ROLLBACK?TRANS?實現
begin?trans
declare?@orderDetailsError?int,@procuntError?int
delete?from?[order?details]?where?productid=42
select?@orderDetailsError?=@@error
delete?from?products?where?productid=42
select?@procuntError=@@error
if(@orderDetailsError?=0?and?@procuntError=0)
COMMIT?TRANS
else
ROLLBACK?TRANS
優點:
所有事務邏輯包含在一個單獨的調用中
擁有運行一個事務的最佳性能
獨立于應用程序
限制:
事務上下文僅存在于數據庫調用中
數據庫代碼與數據庫系統有關
方法2?:使用ADO.NET?實現?
使用ADO.NET?實現,使用這種方式的優點是可以在中間層來管理事務,當然你也可以選擇在數據層來實現。
SqlConnection?和OleDbConnection??對象有一個?BeginTransaction?方法,它可以返回?SqlTransaction
或者OleDbTransaction?對象。而且這個對象有?Commit?和?Rollback?方法來管理事務
SqlConnection?sqlConnection?=?new?SqlConnection("workstation?id=WEIXIAOPING;packet?size=4096;user?id=sa;initial?catalog=Northwind;persist?security?info=False");
sqlConnection.Open();
SqlTransaction??myTrans?=?sqlConnection.BeginTransaction();
SqlCommand?sqlInsertCommand?=?new?SqlCommand();
sqlInsertCommand.Connection?=?sqlConnection
sqlInsertCommand.Transaction=myTrans;
try{
sqlInsertCommand.CommandText="insert?into?tbTree(Context,ParentID)?values('北京',1)";
sqlInsertCommand.ExecuteNonQuery();
sqlInsertCommand.CommandText="insert?into?tbTree(Context,ParentID)?values('上海',1)";
sqlInsertCommand.ExecuteNonQuery();
myTrans.Commit();
}catch(Exception?ex)
{
myTrans.Rollback();
}
finally
{
sqlConnection.Close();
}
優點:
簡單性
和數據據事務差不多的快
獨立于數據庫,不同數據庫的專有代碼被隱藏了
缺點:
事務不能跨越多個數據庫連接
事務執行在數據庫連接層上,所以需要在事務過程中維護一個數據庫連接
ADO.NET分布事務也可以跨越多個數據庫,但是其中一個SQL?SERVER?數據庫的話,通過用SQL?SERVER連接服務器連接到別的數據庫,但是如果是在DB2和Orcal之間就不可以。
以上兩種事務是經常用到的事務處理方法。
方法3??COM+事務(分布式事務)
.NET?Framework?依靠?MTS/COM+?服務來支持自動事務。COM+?使用?Microsoft?Distributed?Transaction?Coordinator?(DTC)?作為事務管理器和事務協調器在分布式環境中運行事務。
這樣可使?.NET?應用程序運行跨多個資源結合不同操作(例如,將定單插入?SQL?Server?數據庫、將消息寫入?Microsoft?消息隊列?(MSMQ)?隊列、以及從?Oracle?數據庫檢索數據)
的事務。
COM+事務處理的類必須繼承System.EnterpriseServices.ServicedComponent,其實web?service就是繼承System.EnterpriseServices.ServicedComponent,所以web?service也支持
COM+事務。
定義一個COM+事務處理的類
[Transaction(TransactionOption.Required)]
public?class?DataAccess:System.EnterpriseServices.ServicedComponent
{
}
TransactionOption枚舉類型支持5個COM+值(Disabled,NotSupported,Required,RequiresNew,Supported)
Disabled??????忽略當前上下文中的任何事務。
NotSupported??使用非受控事務在上下文中創建組件。
Required??????如果事務存在則共享事務,并且如有必要則創建新事務。
RequiresNew???使用新事務創建組件,而與當前上下文的狀態無關。
Supported?????如果事務存在,則共享該事務。
一般來說COM+中的組件需要Required?或Supported。當組件用于記錄或查帳時RequiresNew?很有用,因為組件應該與活動中其他事務處理的提交或回滾隔離開來。
派生類可以重載基類的任意屬性。如DataAccess選用Required,派生類仍然可以重載并指定RequiresNew或其他值。
COM+事務有手動處理和自動處理,自動處理就是在所需要自動處理的方法前加上[AutoComplete],根據方法的正常或拋出異常決定提交或回滾。
手動處理就是調用ContextUtil類中EnableCommit,SetComplete,SetAbort方法。
public?string??testTransaction()
{
try
{
ContextUtil.EnableCommit();
InsertARecord1();
InsertARecord2();
ContextUtil.SetComplete();
return?"succeed!";
}
catch(Exception?ex)
{
ContextUtil.SetAbort();
return?"failed!";
}
}
public?void?InsertARecord1()
{
string?strconn="workstation?id=WEIXIAOPING;packet?size=4096;user?id=sa;initial?catalog=Northwind;persist?security?info=False";
SqlConnection?conn=new?SqlConnection(strconn);
conn.Open();
SqlCommand?command=new?SqlCommand("insert?into?tbTree(Context,ParentID)?values('北京',1)",conn);
command.ExecuteNonQuery();
conn.Close();
}
public?void?InsertARecord2()
{
string?strconn="workstation?id=WEIXIAOPING;packet?size=4096;user?id=sa;initial?catalog=Northwind;persist?security?info=False";
SqlConnection?conn=new?SqlConnection(strconn);
conn.Open();
SqlCommand?command=new?SqlCommand("insert?into?tbTree(Context,ParentID)?values('上海',1)",conn);
command.ExecuteNonQuery();
conn.Close();
}
在需要事務跨?MSMQ?和其他可識別事務的資源(例如,SQL?Server?數據庫)運行的系統中,只能使用?DTC?或?COM+?事務,除此之外沒有其他選擇。DTC?協調參與分布式事務的所有資源管理器, ?也管理與事務相關的操作。
這種做法的缺點是,由于存在?DTC?和?COM?互操作性開銷,導致性能降低。
COM+事務處理的類必須強命名。
本文標題:包含在vb.net中的事務的詞條
URL網址:http://vcdvsql.cn/article18/hspcgp.html
成都網站建設公司_創新互聯,為您提供云服務器、網站制作、ChatGPT、關鍵詞優化、建站公司、電子商務
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯