中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Oracle數據庫上如何使用VS2010構建.NET應用程序

發布時間:2021-10-27 16:26:06 來源:億速云 閱讀:178 作者:柒染 欄目:編程語言

本篇文章給大家分享的是有關Oracle數據庫上如何使用VS2010構建.NET應用程序,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

在本文中,我將說明構建使用 Oracle 數據庫的 C# 或 Visual Basic .NET 應用程序所涉及到的基本但不可或缺的過程,包括:

如何添加工程引用,以在您的 .NET 工程中支持 Oracle 類庫

如何創建 Oracle 數據庫連接字符串

如何使用 Connection、Command 和 DataReader 對象

您將有機會應用在三個上機操作實踐中學到的內容,難度從相對簡單逐漸演變到復雜。如果您已經熟悉使用 Visual Studio 2005/2008 構建 Oracle 數據庫的 .NET 應用程序,則會發現使用 Visual Studio 2010 的體驗非常類似。

.NET 數據提供程序

除了基本的 Oracle 客戶端連通性軟件,.NET 應用程序還需要使用稱為托管數據提供程序(其中“托管”指的是代碼由 .NET 框架管理)的工具。數據提供程序是指 .NET 應用程序代碼和 Oracle 客戶端連通性軟件之間的層。在幾乎所有情況下,最優的性能都是通過使用為特定數據庫平臺優化了的提供程序而不是一般的 .NET OLE DB 數據提供程序實現的。

Oracle、Microsoft 和第三方供應商都提供了針對 Oracle 數據庫進行了優化的 .NET 數據提供程序。Oracle 和 Microsoft 均免費提供自己的 Oracle 數據提供程序。Microsoft 針對 .NET Framework 的提供程序已廢棄。Oracle 則繼續支持和開發其 .NET 數據提供程序 Oracle Data Provider for .NET (ODP.NET)。在本文中,我們將使用 ODP.NET,該提供程序包含在 Oracle Database 中或單獨提供下載。

ODP.NET 提供標準的 ADO.NET 數據訪問,同時還提供專用于 Oracle 數據庫的特性,如 XML DB、數據訪問性能優化和真正應用集群負載平衡及快速連接故障切換。最新的 ODP.NET 版本 (11.2) 支持連接到 Oracle Database 9i 第 2 版服務器及更高版本。數據庫服務器可以位于 Windows、Linux、UNIX 或 Oracle 數據庫支持的任何其他操作系統平臺上。

安裝 ODP.NET 和 Oracle 客戶端軟件后,即可開始使用 Visual Studio 進行應用程序開發。在開始開發前,請先確認客戶端連通性。如果您在安裝了 Visual Studio 的計算機上能夠使用 Oracle 客戶端軟件(如 SQL*Plus)連接到 Oracle 數據庫,則證明您已經正確地安裝和配置了 Oracle 客戶端軟件。

如果您是初次接觸 Oracle,請參見 Oracle 數據庫兩日速成開發人員指南 中的“安裝 .NET 產品”一節,其中專門介紹了有關安裝和配置 ODP.NET 的背景信息;或參見 Oracle 數據庫文檔庫,了解有關 Oracle 數據庫的一般信息。

在 Visual Studio 2010 中創建工程

現在我們來創建一個用于從 Oracle 數據庫中檢索數據的 ODP.NET 應用程序。然后,我們將了解如何使用 ODP.NET 執行錯誤處理,以及如何處理其他數據檢索情況。

啟動 Visual Studio 之后,第一個任務是創建一個工程。可以按如下所示單擊 New Project,也可以選擇 File | New | Project

Oracle數據庫上如何使用VS2010構建.NET應用程序
圖 1
 在 Visual Studio 2010 中創建一個新工程
 

出現 New Project 對話框。在對話框左側的 Installed Templates 下,選擇您的編程語言。在這個例子中,我們選擇 Visual Basic。在對話框中部,選擇一個工程模板。為簡單起見,我們選擇 Windows Forms Application。

Oracle數據庫上如何使用VS2010構建.NET應用程序
圖 2
 使用 New Project 對話框
 

您將需要為工程名稱(我們使用 OraWinApp)和解決方案名稱(我們使用 OraWinApp)指定有意義的名稱。一個解決方案包含一個或多個工程。當一個解決方案僅包含一個工程時,許多人對二者使用相同的名稱。請注意,對話框中有一個下拉列表框,可以在其中指定您要針對的 .NET Framework 版本。如果您是為早期版本的 .NET Framework 編寫應用程序,則應從該下拉列表中選擇相應的版本。單擊 OK 按鈕繼續。

添加引用

由于我們的工程必須與 Oracle 數據庫連接,因此必須添加一個到包含所選數據提供程序的 ODP.NET DLL 的引用。在 Visual Studio 右側的 Solution Explorer 內,選擇工程名稱,右鍵單擊并選擇 Add Reference。或者,您可以轉至菜單欄并選擇 Project,然后選擇 Add Reference。

Oracle數據庫上如何使用VS2010構建.NET應用程序
圖 3
 添加引用
 

出現 Add Reference 對話框。選擇 .NET 選項卡。Visual Studio 將構造一個列表,其中列出可以添加到工程中的 .NET 組件。這可能需要幾秒鐘的時間。完成后,您可以單擊 Component Name 列按字母順序排列組件列表。

Oracle數據庫上如何使用VS2010構建.NET應用程序
圖 4
 選擇適用于 .NET 4 的 ODP.NET 托管數據提供程序

ODP.NET 位于 Oracle.DataAccess 組件名下。從列表中選擇 Oracle.DataAccess,然后單擊 OK 按鈕讓工程知道 ODP.NET 數據提供程序。一定要選擇正確的版本。由于這是一個 .NET 4 工程,所以在此選擇了 4.112.2.0 版的 Oracle.DataAccess,但您可以選擇以 4 開頭的任意 ODP.NET 版本。

Visual Basic/C# 語句

添加引用之后,標準的做法是添加 Visual Basic Imports 語句或 C# using 語句。從技術上講,這些語句不是必需的,但通過它們可以讓您無需使用冗長的完全限定名來引用數據庫對象。

按照慣例,這些語句出現在代碼文件的頂部或頂部附近,在命名空間或類聲明之前。

Imports Oracle.DataAccess.Client ' Visual Basic ODP.NET Oracle managed provider using Oracle.DataAccess.Client; // C# ODP.NET Oracle managed provider

添加完引用之后,Intellisense 將幫助您完成 Imports 或 using 語句的添加,如圖 5 所示。

Oracle數據庫上如何使用VS2010構建.NET應用程序
圖 5
 在 Visual Basic 中添加 Imports 語句

連接字符串和對象

Oracle 連接字符串和 Oracle 名稱解析是不可分的。在本文中,我們將使用用戶 ID“hr”和口令“hr”連接到 Oracle 的示例 HR 模式。tnsnames.ora 文件是一個 Oracle 網絡配置文件,它定義用于建立連接的數據庫地址。假定我們在 tnsnames.ora 文件中定義了一個數據庫別名 OraDb,如下:

OraDb=   (DESCRIPTION=     (ADDRESS_LIST=       (ADDRESS=(PROTOCOL=TCP)(HOST=ORASRVR)(PORT=1521))     )     (CONNECT_DATA=       (SERVER=DEDICATED)       (SERVICE_NAME=ORCL)     )   )

OraDb 別名定義客戶端的數據庫地址連接信息。要使用上面所述的在 tnsnames.ora 文件中定義的 OraDb 別名,您需要使用以下語法:

Dim oradb As String = "Data Source=OraDb;User Id=hr;Password=hr;" ' Visual Basic string oradb = "Data Source=OraDb;User Id=hr;Password=hr;"; // C#

不過,您可以修改連接字符串,這樣就無需使用 tnsnames.ora 文件。只需使用在 tnsnames.ora 文件中定義別名的語句替換別名即可。本文中的數據庫別名特定于我的數據庫設置。(單擊此處獲取更多有關為數據庫創建數據庫別名的信息。)

' Visual Basic  Dim oradb As String = "Data Source=(DESCRIPTION=" _            + "(ADDRESS=(PROTOCOL=TCP)(HOST=ORASRVR)(PORT=1521))" _            + "(CONNECT_DATA=(SERVICE_NAME=ORCL)));" _            + "User Id=hr;Password=hr;"  // C# string oradb = "Data Source=(DESCRIPTION="              + "(ADDRESS=(PROTOCOL=TCP)(HOST=ORASRVR)(PORT=1521))"              + "(CONNECT_DATA=(SERVICE_NAME=ORCL)));"              + "User Id=hr;Password=hr;";

正如您在上面看到的那樣,用戶名和口令是以明文方式嵌入到連接字符串中的。這是創建連接字符串的最簡單的方法。然而,從安全的角度而言不加密文本的方法是不可取的。尤其是,您需要了解編譯的 .NET 應用程序代碼僅比不加密文本形式的源代碼文件稍微安全一點。可以非常簡便地反編譯 .NET DLL 和 EXE 文件,進而查看原始的不加密文本形式的內容。(加密實際上是正確的解決方案,但這個主題與我們這里的討論相差太遠。)

接下來,您必須從連接類中完成一個連接對象的實例化。連接字符串必須與連接對象關聯。

Dim conn As New OracleConnection(oradb) ' Visual Basic OracleConnection conn = new OracleConnection(oradb); // C#

注意,通過將連接字符串傳遞給連接對象的構造器(該構造器進行了重載),連接字符串與連接對象建立關聯。構造函數的其他重載允許使用以下這些替代的語法:

Dim conn As New OracleConnection() ' Visual Basic conn.ConnectionString = oradb  OracleConnection conn = new OracleConnection(); // C# conn.ConnectionString = oradb;

在連接字符串與連接對象建立關聯之后,使用 Open 方法來創建實際的連接。

conn.Open() ' Visual Basic conn.Open(); // C#

我們將在稍后介紹錯誤處理。

Command 對象

command 對象用于指定執行的 SQL 命令文本 — SQL 字符串或存儲過程。類似于 connection 對象,它必須從完成其類的實例化,并且它擁有一個重載的構造函數。在本示例中,ODP.NET 將在 departments 表中執行 SQL 查詢,并返回 department_id 為 10 的 department_name。

Dim sql As String = "select department_name from departments where department_id = 10" ' Visual Basic Dim cmd As New OracleCommand(sql, conn) cmd.CommandType = CommandType.Text  string sql = " select department_name from departments where department_id = 10"; // C# OracleCommand cmd = new OracleCommand(sql, conn); cmd.CommandType = CommandType.Text;

使用不同的重載時,語法的結構稍有不同。command 對象有用于執行命令文本的方法,我們將在下一部分中講述。不同的方法適用于不同類型的 SQL 命令。

檢索標量值

從數據庫中檢索數據可以通過實例化一個 OracleDataReader 對象并使用 OracleCommand 的 ExecuteReader 方法(它返回一個 OracleDataReader 對象)來實現。通過將列名或以零為基數的列序號傳遞給 OracleDataReader 可以訪問返回的數據。

Dim dr As OracleDataReader = cmd.ExecuteReader() ' Visual Basic dr.Read()  Label1.Text = dr.Item("department_name") ' retrieve by column name Label1.Text = dr.Item(0) ' retrieve the first column in the select list Label1.Text = dr.GetString(0) ' return a .NET data type Label1.Text = dr.GetOracleString(0) ' return an Oracle data type

C# 開發人員必須使用存取程序類型的方法來檢索數據。有適當類型的存取程序用于返回 .NET 本地數據類型,其他存取程序用于返回本地 Oracle 數據類型,所有這些存取程序都受 C#、Visual Basic 或任何其他 .NET 語言的支持。以零為基數的序號被傳遞給存取程序,以指定要返回的列。

OracleDataReader dr = cmd.ExecuteReader(); // C# dr.Read();  label1.Text = dr["department_name"].ToString(); // C# retrieve by column name label1.Text = dr.GetString(0).ToString();  // return a .NET data type label1.Text = dr.GetOracleString(0).ToString();  // return an Oracle data type

在這個簡化的示例中,department_name 的返回值是一個字符串,它用來設置標簽控件的文本的屬性值(也是一個字符串)。但如果檢索的是 department_id(不是一個字符串),那么將出現數據類型不匹配的情況。當源數據類型與目標數據類型不匹配時,.NET 運行時將嘗試隱式地轉換數據類型。有時數據類型不兼容,則隱式轉換將失敗,從而引發異常。但即使可以進行隱式轉換,使用顯式數據類型轉換仍比用隱式數據類型轉換要好。

到整數的顯式轉換顯示如下:

Label1.Text = CStr(dr.Item("department_id")) ' Visual Basic integer to string cast

在隱式轉換上,C# 的容錯能力不如 Visual Basic。您必須自己執行顯式轉換:

label1.Text = dr.GetInt16("department_id").ToString(); // C#

您可以顯式地轉換標量值以及數組。

Close 和 Dispose

可以調用連接對象的 Close 方法或 Dispose 方法來關閉到數據庫的連接。Dispose 方法隱式調用 Close 方法。

conn.Close()   ' Visual Basic conn.Dispose() ' Visual Basic  conn.Close();   // C# conn.Dispose(); // C#

如果您使用 VB 的 Using 關鍵字或 C# 的 using 關鍵字,則不必顯式調用 Close 或 Dispose。

using (OracleConnection conn = new OracleConnection(oradb)) // C# {     conn.Open();      OracleCommand cmd = new OracleCommand();     cmd.Connection = conn;     cmd.CommandText = "select department_name from departments where department_id = 10";     cmd.CommandType = CommandType.Text;              OracleDataReader dr = cmd.ExecuteReader();     dr.Read();      label1.Text = dr.GetString(0); }

此外,OracleCommand 包括 Dispose 方法;OracleDataReader 包括 Close 方法和 Dispose 方法。關閉并刪除 .NET 對象可以釋放系統資源,從而確保高效的應用程序性能,這在高負載情況下尤為重要。您可以試驗在上機操作 1(從數據庫中檢索數據)和上機操作 2(增加交互性)中學到的一些概念。

錯誤處理

當錯誤發生時,.NET 應用程序應當適當地處理錯誤并通過一條有意義的消息來通知用戶。Try-Catch-Finally 結構的錯誤處理是 .NET 語言的一部分。下面是使用 Try-Catch-Finally 語法的一個相對最小的示例:

' Visual Basic  Try     conn.Open()      Dim cmd As New OracleCommand     cmd.Connection = conn     cmd.CommandText = "select department_name from departments " _                       + "where department_id = " + TextBox1.Text     cmd.CommandType = CommandType.Text      If dr.Read() Then         Label1.Text = dr.Item("department_name") ' or use dr.Item(0)     End If Catch ex As Exception ' catches any error     MessageBox.Show(ex.Message.ToString()) Finally     ' In a real application, put cleanup code here. End Try  // C# try {     conn.Open();      OracleCommand cmd = new OracleCommand();     cmd.Connection = conn;     cmd.CommandText = "select department_name from departments where department_id = " + textBox1.Text;     cmd.CommandType = CommandType.Text;      if (dr.Read()) // C#     {         label1.Text = dr["department_name"].ToString();                    // or use dr.GetOracleString(0).ToString()     } } catch (Exception ex) // catches any error {     MessageBox.Show(ex.Message.ToString()); } finally {     // In a real application, put cleanup code here. }

雖然這種方法將適當地捕獲嘗試從數據庫中獲取數據時發生的任何錯誤,但這種方法對用戶卻不友好。例如,看看下面這條在數據庫不可用時顯示的消息:

Oracle數據庫上如何使用VS2010構建.NET應用程序

圖 6 捕獲 ORA-12545 錯誤并顯示給用戶

Oracle DBA 或開發人員很清楚 ORA-12545 的意義,但最終用戶不清楚。一種更好的解決方案是添加一條額外的 Catch 語句來捕獲最常見的數據庫錯誤并顯示對用戶友好的消息。

' Visual Basic  Catch ex As OracleException ' catches only Oracle errors     Select Case ex.Number         Case 1             MessageBox.Show("Error attempting to insert duplicate data.")         Case 12545             MessageBox.Show("The database is unavailable.")         Case Else             MessageBox.Show("Database error: " + ex.Message.ToString())     End Select Catch ex As Exception ' catches any error     MessageBox.Show(ex.Message.ToString())  // C# catch (OracleException ex) // catches only Oracle errors {     switch (ex.Number)     {         case 1:             MessageBox.Show("Error attempting to insert duplicate data.");             break;         case 12545:             MessageBox.Show("The database is unavailable.");             break;         default:             MessageBox.Show("Database error:" + ex.Message.ToString());             break;     } } catch (Exception ex) // catches any error not previously caught {     MessageBox.Show(ex.Message.ToString()); }

注意上面的代碼示例中的兩條 Catch 語句。如果沒有捕獲到任何 Oracle 錯誤,那么將跳過第一條 Catch 語句分支,讓第二條 Catch 語句來捕獲任何其他非 Oracle 錯誤。在代碼中,應該根據從特殊到一般的順序對 Catch 語句排序。在執行完用戶友好的異常處理代碼之后,ORA-12545 錯誤消息顯示如下:

Oracle數據庫上如何使用VS2010構建.NET應用程序

圖 7 ORA-12545 錯誤的用戶友好的錯誤消息

無論是否發生錯誤,Finally 代碼塊總會執行。清除代碼應包含在此代碼塊中。如果未使用 Using 或 using,應清除 Finally 代碼塊中的連接和其他對象。

利用 DataReader 檢索多個值

到目前為止,我們的示例僅說明了如何檢索單個值。OracleDataReader 可以檢索多列和多行的值。首先進行多列、單行的查詢:

select department_id, department_name, location_id from departments where department_id = 10

本文為簡明起見,我們使用一個表,即 departments 表。要獲取列的值,可以使用以零為基數的序號或列名。序號與查詢中的順序相關。因此,可以在 Visual Basic 中通過使用 dr.Item(2) 或 dr.Item("location_id") 來檢索 location_id 列的值。

下面是將 department_name 和來自上一查詢的 location_id 列串連起來的代碼段: 

Label1.Text = "The " + dr.Item("department_name") + " department is in " _               + dr.Item("location_id") ' VB  label1.Text = "The " + dr["department_name"].ToString() + " department is in " +                dr["location_id"].ToString();  // C#

現在我們進行返回多行的查詢: 

select department_id, department_name, location_id from departments

要處理從 OracleDataReader 中返回的多行,需要某種類型的循環結構。此外,需要一個可以顯示多行的控件。OracleDataReader 是一個僅正向的只讀游標,因此不能將其與可更新或完全可滾動的控件(如 Windows Forms DataGrid 控件)捆綁在一起。OracleDataReader 與 ListBox 控件兼容,如以下代碼段所示:

While dr.Read() ' Visual Basic    ListBox1.Items.Add("The " + dr.Item("department_name") _                       + " department is in " + dr.Item("location_id")) End While  while (dr.Read()) // C# {     listBox1.Items.Add("The " + dr["department_name"].ToString() + " department is in " +                        dr["location_id"].ToString()); }



上機操作 3(利用 OracleDataReader 檢索多列和多行)重點介紹了這些概念中的一部分。

在 Windows x64 上構建和運行

在 Windows x64 操作系統上運行 Visual Studio 2010 時,可以使用 Configuration Manager 更改目標平臺類型。在 Solution Explorer 中選擇解決方案,右鍵單擊并選擇 Configuration Manager。

Oracle數據庫上如何使用VS2010構建.NET應用程序
圖 8 在 Windows x64 上構建時,可以使用 Configuration Manager 更改目標平臺類型。

總結

介紹使用 .NET 編程語言訪問 Oracle 數據庫的過程。您現在應該能夠連接數據庫并檢索多列和多行。

上機操作 1:從數據庫中檢索數據
前提條件是您已經創建了一個工程并添加了一個引用(如本文前面部分所述)。

  1. 接著向 Windows 表單中添加一個按鈕控件和一個標簽控件。務必在這些控件的上方留出空間,以便在上機操作 2 中添加其他控件。

    Oracle數據庫上如何使用VS2010構建.NET應用程序

圖 9 包含按鈕和標簽控件的表單(上機操作 1)


  1. 添加代碼,它們用于從 Oracle 數據庫中檢索數據并在表單上顯示結果。將代碼放在按鈕的單擊事件處理程序中。開始這項任務的最容易的方式是雙擊該按鈕,因為它將為事件處理程序創建一個 stub。 

    Oracle數據庫上如何使用VS2010構建.NET應用程序
    圖 10 單擊事件處理程序 stub。

  2. 在 Public Class 聲明之前添加 Visual Basic Imports 語句,或在命名空間聲明之前添加 C# using 語句。 

    Imports Oracle.DataAccess.Client ' Visual Basic, ODP.NET Oracle managed provider

    using Oracle.DataAccess.Client; // C#, ODP.NET Oracle managed provider

  3. 在 Private Sub 和 End Sub 語句之間添加 Visual Basic 版本的單擊事件處理程序代碼(請務必用您服務器的主機名替代 ORASRVR 并將服務名稱項替換為數據庫的服務名稱): 



    將以下 C# 代碼添加到按鈕單擊事件處理程序的 { 和 } 花括號之間(請務必用您服務器的主機名替代 ORASRVR 并將服務名稱項替換為數據庫的服務名稱): 


    1. string oradb = "Data Source=(DESCRIPTION=(ADDRESS_LIST=" 

    2.           + "(ADDRESS=(PROTOCOL=TCP)(HOST=ORASRVR)(PORT=1521)))" 

    3.           + "(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=ORCL)));" 

    4.           + "User Id=hr;Password=hr;"; 

    5.  

    6. OracleConnection conn = new OracleConnection(oradb); // C# 

    7. conn.Open(); 

    8.  

    9. OracleCommand cmd = new OracleCommand(); 

    10. cmd.Connection = conn; 

    11. cmd.CommandText = 

    12.      "select department_name from departments where department_id = 10"; 

    13. cmd.CommandType = CommandType.Text; 

    14.  

    15. OracleDataReader dr = cmd.ExecuteReader(); 

    16. dr.Read();  // replace this statement in next lab 

    17. label1.Text = dr["department_name"].ToString();  // remove in next lab 

    18.  

    19. dr.Dispose(); 

    20. cmd.Dispose(); 

    21. conn.Dispose(); 

    22. Dim oradb As String = "Data Source=(DESCRIPTION=(ADDRESS_LIST=" _ 

    23.         + "(ADDRESS=(PROTOCOL=TCP)(HOST=ORASRVR)(PORT=1521)))" _ 

    24.         + "(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=ORCL)));" _ 

    25.         + "User Id=hr;Password=hr;" 

    26.  

    27. Dim conn As New OracleConnection(oradb) ' Visual Basic 

    28. conn.Open() 

    29.  

    30. Dim cmd As New OracleCommand 

    31. cmd.Connection = conn 

    32. cmd.CommandText = _ 

    33.      "select department_name from departments where department_id = 10" 

    34. cmd.CommandType = CommandType.Text 

    35.  

    36. Dim dr As OracleDataReader = cmd.ExecuteReader() 

    37. dr.Read()  ' replace this statement in next lab 

    38. Label1.Text = dr.Item("department_name") ' or dr.Item(0), remove in next lab 

    39.  

    40. dr.Dispose() 

    41. cmd.Dispose() 

    42. conn.Dispose() 

  4. 運行應用程序。單擊按鈕。您將看到以下內容: 

    Oracle數據庫上如何使用VS2010構建.NET應用程序
    圖 11 成功檢索的數據

上機操作 2:增加交互性

現在在代碼中實現了數據庫訪問的基本功能,下一步是為應用程序增加交互性。與運行硬編碼的查詢不同,可以添加一個文本框控件來接受用戶輸入的部門號碼(即 department_id)。

  1. 向表單中添加一個文本框控件和另一個標簽控件(如下所示):將 Label2 控件的文本屬性設為“Enter department_id:”并確保沒有設置 TextBox1 的 Text 屬性。 

    Oracle數據庫上如何使用VS2010構建.NET應用程序
    圖 12 包含按鈕和標簽控件的表單(上機操作 2)
     

  2. 修改定義 select 字符串的代碼: 


    1. cmd.CommandText = _ 

    2.     "select department_name from departments where department_id = "_ 

    3.     + TextBox1.Text 'VB 

    4.  

    5. cmd.CommandText = "select department_name from departments where department_id = " + textBox1.Text; // C# 

  3. 運行應用程序。在 department_id 中輸入 10 來測試應用程序。輸入一個無效的 department_id(例如 12)重新測試應用程序。應用程序將終止。 

    Oracle數據庫上如何使用VS2010構建.NET應用程序
    圖 13 未處理的異常
     

  4. 修改代碼防止在輸入無效的 department_id 時出現錯誤。讓我們回顧一下,ExecuteReader 方法實際返回一個對象。將包含 dr.Read 的代碼行替換為以下全部語句。                 



    輸入不存在的 department_id 數字來測試應用程序。現在應用程序不再終止。輸入字母 A 代替數字,然后單擊按鈕。應用程序終止。很明顯,我們的應用程序需要更好的方法來處理錯誤。

    可能有人會指出,應用程序應當不允許用戶進行導致錯誤的無效輸入,但根本上應用程序必須添加強健的錯誤處理功能。不是所有的錯誤都是可預防的,因此必須具備錯誤處理功能。

    1. If dr.Read() Then ' Visual Basic 

    2.     Label1.Text = dr.Item("department_id").ToString() 

    3. Else 

    4.     Label1.Text = "department_id not found" 

    5. End If 

    6.  

    7. if (dr.Read()) // C# 

    8.     label1.Text = dr["department_id"].ToString();; 

    9. else 

    10.     label1.Text = "department_id not found"; 

上機操作 3:使用 OracleDataReader 檢索多列和多行


現在檢索了單個值,下一步是使用 OracleDataReader 檢索多列和多行。在表單中添加一個 ListBox 控件來顯示結果。

  1. 在表單中添加一個 ListBox 控件。重新調整控件的大小,填滿表單的大部分寬度(如下所示)。 

    Oracle數據庫上如何使用VS2010構建.NET應用程序
    圖 14 添加了 ListBox 的表單
     

  2. 從查詢中刪除 where 子句,并添加以下列: 


    1. cmd.CommandText = _ 

    2.     "select department_id, department_name, location_id from departments" ' VB 

    3.  

    4. cmd.CommandText = "select department_id, department_name, location_id from departments "; // C# 

  3. 查詢結果將在一個 while 循環中讀取,并將填充 ListBox 控件。按如下所示修改 Visual Basic 代碼,針對您的數據庫相應修改主機和服務名稱: 


    1. Dim oradb As String = "Data Source=(DESCRIPTION=(ADDRESS_LIST=" _ 

    2.         + "(ADDRESS=(PROTOCOL=TCP)(HOST=ORASRVR)(PORT=1521)))" _ 

    3.         + "(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=ORCL)));" _ 

    4.         + "User Id=hr;Password=hr;" 

    5.  

    6. Dim conn As New OracleConnection(oradb) ' Visual Basic 

    7. conn.Open() 

    8.  

    9. Dim cmd As New OracleCommand 

    10. cmd.Connection = conn 

    11. cmd.CommandText = _ 

    12.     "select department_id, department_name, location_id from departments" ' VB 

    13. cmd.CommandType = CommandType.Text 

    14.  

    15. Dim dr As OracleDataReader = cmd.ExecuteReader() 

    16. While dr.Read() 

    17.     ListBox1.Items.Add("The " + dr.Item("department_name") + _ 

    18.                        " department is in " + dr.Item("location_id").ToString()) 

    19. End While 

    20.  

    21. dr.Dispose() 

    22. cmd.Dispose() 

    23. conn.Dispose() 

    24. Modify your C# code to look like this:  

    25. string oradb = "Data Source=(DESCRIPTION=(ADDRESS_LIST=" 

    26.           + "(ADDRESS=(PROTOCOL=TCP)(HOST=ORASRVR)(PORT=1521)))" 

    27.           + "(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=ORCL)));" 

    28.           + "User Id=hr;Password=hr;"; 

    29.  

    30. OracleConnection conn = new OracleConnection(oradb); // C# 

    31. conn.Open(); 

    32.  

    33. OracleCommand cmd = new OracleCommand(); 

    34. cmd.Connection = conn; 

    35. cmd.CommandText = "select department_id, department_name, location_id from departments.168"; 

    36. cmd.CommandType = CommandType.Text; 

    37.  

    38. OracleDataReader dr = cmd.ExecuteReader(); 

    39. while (dr.Read()) 

    40.    listBox1.Items.Add("The " + dr["department_name"].ToString() + 

    41.                       " department is in " + dr["location_id"].ToString()); 

    42.  

    43. dr.Dispose(); 

    44. cmd.Dispose(); 

    45. conn.Dispose(); 

  4. 運行應用程序。ListBox 應填充了 departments 表中的所有部門名稱和位置。供下載的代碼中已經具備了錯誤處理功能。


以上就是Oracle數據庫上如何使用VS2010構建.NET應用程序,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

裕民县| 麻江县| 马龙县| 眉山市| 凉城县| 大同县| 昆明市| 赣州市| 鄯善县| 龙山县| 闽侯县| 绥阳县| 呼玛县| 怀化市| 华池县| 苗栗市| 闽清县| 建阳市| 湘潭市| 朝阳市| 乌审旗| 嘉兴市| 彭山县| 西充县| 汕尾市| 和硕县| 将乐县| 固安县| 张家口市| 玉林市| 宿迁市| 洛阳市| 临洮县| 碌曲县| 那曲县| 盘锦市| 明光市| 郸城县| 科技| 鹤壁市| 抚松县|