接下來,您必須從連接類中完成一個連接對象的實例化。 連接字符串必須與連接對象關聯。 Dim conn As New OracleConnection(oradb) ' VB.NET OracleConnection conn = new OracleConnection(oradb); // C# 注重,通過將連接字符串傳遞給連接對象的構造器(該構造器進行了重載),連接字符串與連接對象建立關聯。 構造函數的其他重載答應以下這些替代的語法: Dim conn As New OracleConnection() ' VB.NET conn.ConnectionString = oradb OracleConnection conn = new OracleConnection(); // C# conn.ConnectionString = oradb; 在連接字符串與連接對象建立關聯之后,使用 Open 方法來創建實際的連接。 conn.Open() ' VB.NET conn.Open(); // C# 我們將在稍后介紹錯誤處理。
Command 對象
Command 對象用于指定執行的 SQL 命令文本 — SQL 字符串或存儲過程。 類似于 Connection 對象,它必須從完成其類的實例化,并且它擁有一個重載的構造函數。 Dim sql As String = "select dname from dept where deptno = 10" ' VB.NET Dim cmd As New OracleCommand(sql, conn) cmd.CommandType = CommandType.Text string sql = "select dname from dept where deptno = 10"; // C# OracleCommand cmd = new OracleCommand(sql, conn); cmd.CommandType = CommandType.Text; 不同的重載,語法的結構稍微有點不同。 Command 對象有用于執行命令文本的方法。 不同的方法適用于不同類型的 SQL 命令。 檢索標量值
從數據庫中檢索數據可以通過實例化一個 DataReader 對象并使用 ExecuteReader 方法(它返回一個 OracleDataReader 對象)來實現。 通過將列名稱或以零為基數的列序號傳遞給項屬性 B.NET 開發人員可以訪問返回的數據。 另一種選擇是使用存取程序類型方法來返回列數據。 Dim dr As OracleDataReader = cmd.ExecuteReader() ' VB.NET dr.Read() Label1.Text = dr.Item("dname") ' retrieve by column name Label1.Text = dr.Item(0) ' retrieve the first column in the select list Label1.Text = dr.GetString(0) ' retrieve the first column in the select list C# 開發人員必須使用存取器方法來檢索數據。 有適當類型的存取程序用于返回 .NET 本地數據類型,其他的存取程序用于返回本地 Oracle 數據類型。 以零為基數的序號被傳遞給存取程序,以指定返回哪一列。 OracleDataReader dr = cmd.ExecuteReader(); // C# dr.Read(); label1.Text = dr.GetString(0); // C# retrieve the first column in the select list 在這個簡化的例子中,dname 的返回值是一個字符串,它用來設置標簽控件的文本的屬性值(也是一個字符串)。 但假如檢索的是 deptno,而不是字符串,那么將出現數據類型不匹配的情況。 當源數據類型與目標數據類型不匹配時,.NET 運行時將嘗試隱式地轉換數據類型。 有時數據類型不兼容,則隱式轉換將失敗,并跳出一個異常警報。 但即使可以進行隱式轉換,使用顯式數據類型轉換仍比用隱式數據類型轉換好。
到目前為止,我們的示例僅說明了如何檢索單個值。 DataReader 可以檢索多列和多行的值。 首先進行多行、單列的查詢: select deptno, dname, loc from dept where deptno = 10 要獲取列的值,可以使用以零為基數的序號或列名。 序號與查詢中的順序相關。 因而,可以在 VB.NET 中通過使用 dr.Item(2) 或 dr.Item("loc") 來查詢 loc 列的值。
下面是將 dname 和來自上一查詢的 loc 列串連起來的代碼段: Label1.Text = "The " + dr.Item(1) + " department is in " + dr.Item("loc") ' VB.NET Label1.Text = "The " + dr.GetString(1) + " department is in " + dr.GetString(2); // C# 現在我們進行返回多行的查詢: select deptno, dname, loc from dept 要處理從 DataReader 中返回的多行,需要某種類型的循環結構。 此外,需要一個可以顯示多行的控件。 DataReader 是一個僅正向的只讀游標,因此不能將其與可更新或完全可滾動的控件(如 Windows Forms DataGrid 控件)捆綁在一起。 DataReader 與 ListBox 控件兼容,如以下代碼段所示: While dr.Read() ' VB.NET ListBox1.Items.Add("The " + dr.Item(1) + " department is in " + dr.Item("loc")) End While while (dr.Read()) // C# { listBox1.Items.Add("The " + dr.GetString(1) + " department is in " + dr.GetString(2); } 上機操作 3(利用 DataReader 檢索多列和多行)重點介紹了這些概念中的一部分。