詳談如何在VB.NET使用ORACLR數(shù)據(jù)庫事務(wù)
大家都知道VB.NET,oracle,但是如何在VB.NET使用ORACLE數(shù)據(jù)庫呢,我想這個(gè)問題很多人都不知道怎么解決,在這里給大家演示一個(gè)示例吧。Oracle.DataAccess.Client 命名空間是 ODP.NET 的一部分,它包含許多類,其中有OracleConnection、OracleCommand 和 OracleTransaction。示例程序用到了這些類。
VB.NET使用ORACLR第 1 步
創(chuàng)建一個(gè) OracleConnection 對象連接到 Oracle 數(shù)據(jù)庫,然后打開該連接。
在 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 屬性指定了您所要連接到的模式的數(shù)據(jù)庫用戶和口令。Data Source 屬性指定了數(shù)據(jù)庫的 Oracle Net 服務(wù)名稱;初始數(shù)據(jù)庫的默認(rèn)服務(wù)名稱為 ORCL。如果您使用的不是初始數(shù)據(jù)庫,或者您的服務(wù)名稱不同,那么您需要在程序中修改 Data Source 屬性的設(shè)置。
VB.NET使用ORACLR第 2 步
創(chuàng)建一個(gè) OracleTransaction 對象,然后調(diào)用 OracleConnection 對象的 BeginTransaction() 方法啟動(dòng)事務(wù)。
在 C# 中:
- OracleTransaction myOracleTransaction =
- myOracleConnection.BeginTransaction();
- In VB.NET:
- Dim myOracleTransaction As OracleTransaction = _
- myOracleConnection.BeginTransaction()
VB.NET使用ORACLR第3 步
創(chuàng)建一個(gè) OracleCommand 對象,用于存儲(chǔ) SQL 語句。
在 C# 中:
- OracleCommand myOracleCommand = myOracleConnection.CreateCommand();
在 VB.NET 中:
- Dim myOracleCommand As OracleCommand =
- myOracleConnection.CreateCommand
因?yàn)?OracleCommand 對象使用 OracleConnection 對象的 CreateCommand() 方法創(chuàng)建的,所以它自動(dòng)使用在第 2 步中為 OracleConnection 對象設(shè)置的事務(wù)。
VB.NET使用ORACLR第 4 步
將 OracleCommand 對象的 CommandText 屬性設(shè)為向表 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() 方法運(yùn)行 INSERT 語句。
在 C# 中:
- myOracleCommand.ExecuteNonQuery();
在 VB.NET 中:
- myOracleCommand.ExecuteNonQuery();
VB.NET使用ORACLR第 6 和第 7 步
將 OracleCommand 對象的 CommandText 屬性設(shè)為向表 Products 中添加一行的第二條 INSERT 語句,并運(yùn)行它。
在 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() 方法提交數(shù)據(jù)庫中的事務(wù)。
在 C# 中:
- myOracleTransaction.Commit();
在 VB.NET 中:
- myOracleTransaction.Commit()
在完成 Commit() 方法之后,由 INSERT 語句添加的兩行將在數(shù)據(jù)庫中永久記錄。
VB.NET使用ORACLR第 9 步
使用 Close() 方法關(guān)閉 OracleConnection 對象。
在 C# 中:
- myOracleConnection.Close();
在 VB.NET 中:
- myOracleConnection.Close()
編譯并運(yùn)行示例程序
要編譯 C# 示例程序,您可以使用 csc 命令運(yùn)行 C# 編譯器。因?yàn)槌绦蚴褂?Oracle Data Access DLL,所以您應(yīng)使用 /r 選項(xiàng)指定該 DLL 的完整路徑,例如:
注意:您需要用您計(jì)算機(jī)上的相應(yīng)路徑來替換該 DLL 的路徑。此外,如果您的計(jì)算機(jī)找不到 csc 編譯器,那么您可能需要運(yùn)行 Microsoft sdkvars.bat 腳本來首先設(shè)置 .NET SDK 的環(huán)境變量;您可以在安裝 .NET SDK 的 bin 目錄中找到該腳本。
如果您遇到以下錯(cuò)誤:
- 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。(有關(guān)設(shè)置的信息,請參閱 John Paul Cook 的技術(shù)文章“在 Oracle 數(shù)據(jù)庫上構(gòu)建 .NET 應(yīng)用程序”。)
下面是用于編譯 VB.NET 程序的等價(jià)命令:
- vbc TransExample1.vb /r:C:\oracle\product\10.1.0\
- Client_1\bin\Oracle.DataAccess.dll /r:system.dll /r:system.data.dll
接下來,輸入以下命令,運(yùn)行示例:
- An exception was thrown
- Message = ORA-12514:TNS:listener does not currently know
- of service requested in connect descriptor
您將看到程序的輸出。不過,如果您遇到類似以下的異常
這說明 OracleConnection 對象的連接字符串中的 Data Source 的設(shè)置不正確。您應(yīng)當(dāng)咨詢您的 DBA 或查閱 Oracle Net 文檔以獲得更多詳細(xì)信息。
如果您使用的是 VS .NET,那么您可以遵循以下指示來編譯和運(yùn)行 C# 程序 TransExample1.cs:
創(chuàng)建一個(gè)新的 C# 控制臺(tái)應(yīng)用程序。File>New Project,然后選擇 Visual C# Projects,Console Application。
將項(xiàng)目命名為 TransExample1。用 TransExample1.cs 中的代碼替換 VS .NET 生成的所有代碼。選擇 Project>Add Reference 添加對 Oracle.DataAccess.dll 的引用,然后瀏覽至您安裝 ODP.NET 的目錄(在我的計(jì)算機(jī)上,它是 C:\oracle\product\10.1.0\Client_1\bin\Oracle.DataAccess.dll),然后雙擊 Oracle.DataAccess.dll。
選擇 Debug>Start without Debugging 運(yùn)行該程序。要編譯和運(yùn)行 TransExample1.vb,您可以執(zhí)行類似的一系列步驟,但第 1 步應(yīng)選擇一個(gè) Visual Basic 控制臺(tái)應(yīng)用程序,并在第 3 步用 TransExample1.vb 中的代碼替換生成的代碼。
查看程序的運(yùn)行結(jié)果
當(dāng)您運(yùn)行完 C# 或 VB .NET 程序時(shí),您可以在 SQL*Plus 中使用以下 SELECT 語句查看事務(wù)的結(jié)果:
- SELECT p.product_id, p.product_type_id, pt. name, p.name, p.description, p.price
- FROM products p, product_types pt
- WHERE p.product_type_id = pt.product_type_id
- AND p.product_id = 5;
- 您將看到以下結(jié)果: PRODUCT_ID PRODUCT_TYPE_ID NAME NAME
- ---------- --------------- ---------- -----------------------
- DESCRIPTION PRICE
- -------------------------------------------------- ----------
- 5 3 Magazine Oracle Magazine
- Magazine about Oracle 4.99
【編輯推薦】