日期:2010-07-02  浏览次数:20365 次

  摘要:使用 Microsoft .NET 框架 1.1 中的 Microsoft .NET Oracle 提供程序访问 Oracle 存储过程和函数。

  本文讨论了如何使用 ADO.NET 访问 Oracle 存储过程(称为 SQL 编程块)和函数(返回单个值的编程块)。

  您可以使用以下托管数据提供程序连接到 Oracle 数据库:Microsoft .NET Oracle 提供程序、OLE DB .NET 提供程序、ODBC .NET 数据提供程序以及 Oracle 的 ODP.NET 提供程序。本文使用用于 Oracle 的 Microsoft?.NET 框架数据提供程序。使用 Oracle ODP.NET 数据提供程序或用于 OLE DB 的 Microsoft .NET 框架数据提供程序时可使用不同的功能。

  Oracle .NET 数据提供程序随 .NET 框架 1.1 一起提供。如果您使用的是 .NET 框架 1.0,您将需要下载 .NET Managed Provider for Oracle。无论是哪个版本,数据提供程序类都位于 System.Data.OracleClient 命名空间中。

  概述

  PL/SQL 是 SQL 的 Oracle 实现。它与 Microsoft?SQL Server? 所使用的 T-SQL 类似,但也有一些不同之处,本文稍后对此进行了详细讨论。与 T-SQL 一样,PL/SQL 扩展了标准 SQL。PL/SQL 用于定义命名编程块,如存储过程、函数和触发器。

  类

  可使用 System.Data.OracleClient 命名空间中类的子集来执行 Oracle 存储过程和函数。下表对这些类进行了说明:

说明

OracleCommand

针对 Oracle 数据库执行的存储过程的 SQL 语句。

OracleConnection

打开的数据库连接。

OracleParameter

OracleCommand 的参数,也可能是它到 DataColumn 的映射。

OracleParameterCollection

OracleParameter 对象的集合。

OracleType

Oracle 数据类型和结构的枚举。

  执行存储过程

  执行 Oracle 存储过程与执行 SQL Server 存储过程类似。下面的步骤说明了如何执行 Oracle 存储过程和检索它返回的结果。

  1.在 HR 架构中创建一个名为 COUNT_JOB_HISTORY 的存储过程,以计算 JOB_HISTORY 表中的记录数。

CREATE OR new PROCEDURE COUNT_JOB_HISTORY
(
    reccount OUT NUMBER
)
IS
BEGIN
    SELECT COUNT(*) INTO reccount
    FROM JOB_HISTORY;
END COUNT_JOB_HISTORY;

  HR 架构是默认 Oracle 安装中包含的一个示例。
 
  2.将 System.Data.OracleClient.dll(用于 Oracle 的 Microsoft .NET 框架数据提供程序)的引用添加到项目中。
 
  3. 使用 using 指令导入 OracleClient 类中的类型。

using System.Data.OracleClient;

  4.创建一个 OracleConnection 对象。

OracleConnection conn = new OracleConnection("Data Source=oracledb;
    User Id=UserID;Password=Password;");

  用您的值替换 Oracle 数据库的名称、用户名和密码。
 
  5. 创建一个 OracleCommand 对象。将其 Connection 属性设置为第 4 步中创建的连接。将其 CommandText 设置为存储过程的名称,并将其 CommandText 属性设置为 CommandType.StoredProcedure。当您调用第 8 步中介绍的一个 Execute() 方法时,该命令对象将执行指定的存储过程。

OracleCommand cmd = new OracleCommand();
cmd.Connection = conn;
cmd.CommandText = "COUNT_JOB_HISTORY";
cmd.CommandType = CommandType.StoredProcedure;

  如果您的存储过程名称含有特殊字符,您就必须使用转义序列。您可以通过重置 CommandText 属性来重用现有的 OracleCommand 对象。
 
  6. 创建输入、输出和返回值的 OracleParameter 对象,并将其添加到 OracleCommand 对象的参数集合中。

cmd.Parameters.Add("reccount", OracleType.Number).Direction =
    ParameterDirection.Output;

  该行代码是以下两行代码的简写形式:

cmd.Parameters.Add("reccount", OracleType.Number);
cmd.Parameters["reccount"].Direction = ParameterDirection.Output;

  7. 如果您要检索结果集,请创建 DataSet、DataTable 或 DataReader。在本示例中,我们只是获取第 6 步中创建的输出参数中的计数。

  8. 使用 OracleCommand 对象的一个 Execute 方法打开连接并执行存储过程,如下所示:

方法