利用 DataReader 检索多个值
到目前为止,我们的示例仅说明了如何检索单个值。 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 检索多列和多行)重点介绍了这些概念中的一部分。
总结
本文向您介绍了使用 VS.NET 编程语言访问 Oracle 数据库的过程。 您现在应该能够连接数据库并检索多列和多行。
John Paul Cook (johnpaulcook@email.com) 是居住在休斯顿的一位数据库和 .NET 顾问。 他撰写了许多关于 .NET、Oracle 和其他主题的文章,并从 1986 年以来一直开发关系数据库应用程序。他目前的兴趣包括 Visual Studio 2005 和 Oracle 10g。 他是 Oracle 认证 DBA 和 Microsoft MCSD for .NET。
上机操作 1: 从数据库中检索数据
- 首先向 Windows 表单添加一个按钮控件和一个标签控件。 务必在这些控件上方保留空间,以便在上机操作 2 中添加控件。
|
图 8: 在上机操作 1 中包含按钮和标签控件的表单 |
- 添加代码,它们用于从 Oracle 数据库中检索数据并在表单上显示结果。 将代码放在按钮的单击事件处理程序中。 开始这项任务的最容易的方式是双击该按钮,因为它将为事件处理程序创建一个 stub。
|
图 9: 单击事件处理程序 stub。 |
- 在 Public Class 声明之前添加 VB.NET Imports 语句,或在命名空间声明之前添加 C# using 语句。
Imports System.Data ' VB.NET
Imports Oracle.DataAccess.Client ' ODP.NET Oracle managed provider
using System.Data; // C#
using Oracle.DataAccess.Client; // ODP.NET Oracle managed provider
- 在 Private Sub 和 End Sub 语句之间添加 VB.NET 版本 事件语句代码(确保用您的服务器的主机名称替代 OTNSRVR):
Dim oradb As String = "Data Source=(DESCRIPTION=(ADDRESS_LIST=" _
+ "(ADDRESS=(PROTOCOL=TCP)(HOST=OTNSRVR)(PORT=1521)))" _
+ "(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=ORCL)));" _
+ "User Id=scott;Password=tiger;"
Dim conn As New OracleConnection(oradb) ' VB.NET
conn.Open()
Dim cmd As New OracleCommand
cmd.Connection = conn
cmd.CommandText = "select dname from dept where deptno = 10"
cmd.CommandType = CommandType.Text
Dim dr As OracleDataReader = cmd.ExecuteReader()
dr.Read()
Label1.Text = dr.Item("dname") ' or dr.Item(0)
conn.Dispose()
将以下 C# 代码添加到按钮的单击事件处理程序中的括号 { 和 } 之间,并确保用您的服务器的主机名称替代 OTNSRVR: string oradb = "Data Source=(DESCRIPTION=(ADDRESS_LIST="
+ "(ADDRESS=(PROTOCOL=TCP)(HOST=OTNSRVR)(PORT=1521)))"
+ "(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=ORCL)));"
+ "User Id=scott;Password=tiger;";
OracleConnection conn = new OracleConnection(oradb); // C#
conn.Open();
OracleCommand cmd = new OracleCommand();
cmd.Connection = conn;
cmd.CommandText = "select dname from dept where deptno = 10";
cmd.CommandType = CommandType.Text;
OracleDataReader dr = cmd.ExecuteReader();
dr.Read();
label1.Text = dr.GetString(0);
conn.Dispose();
- 运行应用程序。 单击按钮。 您将看到以下内容:
|
图 10: 成功检索到数据 |
|
查看本文来源