Oracle Data Provider for .NET(C# 版)入门

本教程说明如何构建使用 Oracle Data Provider for .NET 访问 Oracle 数据库中数据的 .NET 应用程序。

大约 30 分钟

本教程包括下列主题:

将鼠标置于此图标上可以加载和查看本教程的所有屏幕截图。 (警告:因为此操作会同时加载所有屏幕截图,所以网速较慢时,响应时间可能会比较长。)

注:此外,您还可以在下列步骤中将鼠标放在每个单独的图标上,从而仅加载和查看与该步骤相关的屏幕截图。可以通过单击各个屏幕截图来将其隐藏。

除了基本的 Oracle 客户端连通性软件,.NET 应用程序还需要使用称为受管理的数据提供程序(其中“受管理的”指的是代码由 .NET 框架管理)的工具。数据提供程序是指 .NET 应用程序代码和 Oracle 客户端连通性软件之间这一层。

Oracle Data Provider for .NET (ODP.NET) 是 Oracle 的高性能 ADO.NET 2.0 兼容数据提供程序,展示了一整套特定于 Oracle 的特性和优化选项,包括支持真正应用程序集群、XML DB 和高级安全性。通过 Oracle 技术网网站可以免费下载该程序。

当安装了 ODP.NET 和所有要求的 Oracle 客户端连通性软件时,就可以开始使用 Visual Studio 进行应用程序开发了。在开始开发前,请先确认客户端连通性。如果您在 VS.NET 所在的计算机上使用 SQL*Plus 能够与 Oracle 连接,那么证明您已经正确地安装和配置了 Oracle 客户端软件。

如果您刚接触 Oracle,那么请参见 Oracle Data Provider for .NET 开发人员指南 10g 中的“与 Oracle 数据库连接”部分,来具体了解有关 ODP.NET 的背景信息,或参见 Oracle 数据库管理员指南 10g 获得管理 Oracle 数据库的一般信息。您还可以查阅“使用 ODP.NET 与 Oracle 数据库连接”示例代码“方法”文档。

开始本教程之前,您应该:

安装并创建 Oracle 数据库 11g 或 Oracle 数据库 10g 数据库服务器

安装 Visual Studio .NET 2003 或更高版本

从 Oracle 数据库客户端或 OTN 安装 ODP.NET 11g

要在 Visual Studio 中创建一个新项目,执行以下步骤:

1.

从 Windows“程序”菜单启动 Visual Studio。Microsoft Visual Studio GUI 环境出现。在 Recent Projects 面板中的 Create 旁边:单击 Project

New Project 窗口出现。

2.

在 Project 类型列表中选择 Visual C#:Windows。选择 Windows Application 模板。在 Name 域中输入 OraWinApp在 Location 域中输入要在其中保存文件的目录。(注:如果该目录不存在,将创建该目录)。单击 OK

3.

项目创建成功。从 View 菜单中,选择 Solution Explorer 打开 Solution Explorer(如果尚未打开)。

因为项目必须与 Oracle 数据库连接,因此必须添加一个到包含数据提供程序的 dll 的引用。执行以下步骤:

1.

从 Project 菜单中,选择 Add Reference...

Add Reference 对话框出现。

2.

向下滚动 Component Names 的列表并选择 Oracle.DataAccess。单击 OK

注: 如果您看到多个 Oracle.DataAccess 组件,选择“2.102.2.20”版本。

返回主题列表

要从数据库中检索数据,可以在表单中添加一些控件。执行以下步骤:

1.

View 菜单中,选择 Toolbox。工具箱出现。展开 Common Controls

2.

Button 控件拖到 Form1 画布上。

该控件在画布上显示。您还需要创建一个标签。

3.

从 Toolbox 中,将 Label 控件拖到 Form1 画布上。

4.

双击 button1 打开代码窗口。注意,Form1.cs 代码窗口打开。

5.

在 Public Class 声明之前添加以下 C# using 语句。

using Oracle.DataAccess.Client; // ODP.NET Oracle managed provider
using Oracle.DataAccess.Types; 

6.

在 private void button1_Click(object sender, EventArgs e)
{ and } 语句之间添加以下 C# 代码。

string oradb = "Data Source=ORCL;User Id=hr;Password=hr;";
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);
conn.Dispose();

7.

选择 Build > Build Solution

在输出窗口中,确保未收到任何错误。现在可以运行表单了。

8.

选择 Debug > Start Without Debugging

9.

显示表单。单击 button1

标签中显示结果。由于代码中的查询要显示部门 ID 为 10 的部门名称,因此结果是管理部门。关闭 Form1。

返回主题列表

与运行硬编码的查询不同,您可以添加一个文本框控件来接收用户输入的部门 ID。执行以下步骤:

1.

选择 Form1.cs [Design] 选项卡。从 Toolbox 中,将 TextBox 控件拖到 Form1 画布上。

文本框随即显示。您可以将其拖到所需的位置。

2.

Label 控件拖到 Form1 画布上。

3.

随即显示标签。右键单击 Label2,然后选择 Properties

4.

在 Properties 表中,将 Text 属性更改为 Enter Department ID:

5.

选择 Form1.cs 选项卡。

6.

使用绑定变量在 SELECT 语句中包括文本框的值。利用绑定变量,数据库不必在每次文本框值更改时都重新分析 SQL 语句,从而可以提高性能。

紧跟 conn.Open() 语句 后添加以下代码:

OracleParameter parm = new OracleParameter();
parm.OracleDbType = OracleDbType.Decimal;
parm.Value = textBox1.Text;

7.

紧跟 cmd.Connection 语句后添加 cmd.Parameters 语句:

cmd.Parameters.Add(parm);

8.

将 cmd.CommandText 语句的代码更改为:

cmd.CommandText = "select department_name from departments where department_id = :1";

9.

选择 Build > Rebuild Solution

查看输出窗口中是否报告了任何错误。如果没有错误或警告,继续进行下一步。

10.

选择 Debug > Start Without Debugging

11.

在 Department ID 中输入 20,然后单击 button1

12.

注意,Label1 更改为部门的名称。该值取决于在 Department ID 域中输入的内容。

13.

在 Department ID 中输入 300,然后单击 button1

14.

这一次您将收到一条错误,因为没有 ID 为 300 的部门。单击 Quit。在下一个主题中添加一些错误处理以便了解收到错误的确切原因。

返回主题列表

错误处理用以指导用户找出某些内容无法正常工作的原因。在该主题中,您将修改代码以阻止在输入了无效的部门 ID 后出现错误。在该教程中,您将添加一些非常简单的错误处理代码。要获得更强健的错误处理,应该使用结构化异常处理。有关 ODP.NET 结构化异常处理的详细信息,请参考 ODP.NET 在线文档执行以下步骤:

1.

在 Form1.cs 代码中,将以下代码由

dr.Read();
label1.Text = dr.GetString(0);

更改为

if (dr.Read())
{
   label1.Text = dr.GetString(0);
}
else 
{
   label1.Text = "Department ID not found";
};

2.

选择 Build > Rebuild Solution。确定输出窗口中没有报告错误。

3.

选择 Debug > Start Without Debugging

4.

再次在 Department ID 中输入 300,然后单击 button1

5.

这一次,将显示 Department ID is not found 消息。关闭 Form1。

返回主题列表

在该主题中,您要使用列表框检索多个信息集。执行以下步骤:

1.

单击 Form1.cs [Design] 选项卡。从 Toolbox 中,将 Listbox 控件拖到 Form 1 画布上。

2.

表单上显示新的列表框。您可以相应地调整列表框的位置和大小。单击 Form1.cs 选项卡。

3.

删除 cmd.Parameters.Add(parm); 语句。

4.

将 cmd.CommandText 代码由

cmd.CommandText = "select department_name from departments where department_id = :1";

更改为

cmd.CommandText = "select department_id, department_name, city" 
                  + " from departments d, locations l" 
                  + " where d.location_id = l.location_id";

5.

此外,将以下代码行由

if (dr.Read())          
{
  label1.Text = dr.GetString(0);
}
else 
{
  label1.Text = "Department ID not found";
};

更改为

while (dr.Read()) 
{ 
   listBox1.Items.Add("The " + dr.GetString(1) 
         + " department is in " + dr.GetString(2));
}

6.

选择 Build > Rebuild Solution

7.

选择 Debug > Start Without Debugging

8.

单击 button1

9.

将显示所有部门及其位置的列表。关闭 Form1。

返回主题列表

在本教程中,您学习了如何:

创建项目并添加引用
从数据库中检索数据
合并交互式控件和错误处理
检索多列和多行

返回主题列表

将鼠标移到该图标上可以隐藏所有屏幕截图。