• 网络学院
  • 新手学堂
  • 操作系统
  • 网络技术
  • 软件应用
  • 办公软件
  • 编程技术
  • 网站架设
  • 数据库类
  • 平面设计
  • 多媒体类
  • 游戏资讯
  • 教学论文
  • 认证考试
用ADO.NET访问Oracle9i存储过程(下)
广告位
  站点:
  • 首 页
  • 最新软件
  • 最新文章
  • 国内软件
  • 国外软件
  • 汉化软件
  • 源码下载
  • 字体下载
用ADO.NET访问Oracle9i存储过程(下)
软件发布 用ADO.NET访问Oracle9i存储过程(下)
网络软件 系统工具 应用软件 联络聊天 图形图像 多媒体类 行业软件 游戏娱乐 编程开发 安全相关 教育教学 数码软件
热门软件: QQ 瑞星 pplive e话通 木马克星 千千静听 office2000 五笔字根 Photoshop 视频分割
返回首页 | 文章首页 | 认证考试 | Oracle认证 | Oracle指导 | 用ADO.NET访问Oracle9i存储过程(下)

用ADO.NET访问Oracle9i存储过程(下)

 

添加时间: 2008-4-26 1:43:06  作者: Oracle指导  阅读次数:35   来源: http://www.d9soft.com

 

 

       

对于 HR 架构的默认安装,控制台输出显示了员工 101 的两个记录中每个记录的字段(用分号分隔):
101;9/21/1989 12:00:00 AM;10/27/1993 12:00:00 AM;AC_ACCOUNT;110;
101;10/28/1993 12:00:00 AM;3/15/1997 12:00:00 AM;AC_MGR;110;
上述代码显示,包中的过程是使用包名称 (ELECT_JOB_HISTORY) 和过程的名称(在此情况下为 GetJobHistoryByEmployeeId)指定的,二者之间用句点分隔。
代码还说明了如何定义结果集的 REF CURSOR 参数。请注意,数据类型为 OracleType.Cursor,方向为 ParameterDirection.Output。
还请注意,在访问 REF CURSOR 中的结果集的整个过程中,连接都保持打开状态。
如果包返回多个游标,则 DataReader 会按照您向参数集合中添加它们的顺序来访问这些游标,而不是按照它们在过程中出现的顺序来访问。可使用 DataReader 的 NextResult() 方法前进到下一个游标。
返回单个值的存储过程
OracleCommand 类的 ExecuteOracleScalar() 方法用于执行将单个值作为 OracleType 数据类型返回的 SQL 语句或存储过程。如果命令返回一个结果集,则该方法会返回第一行第一列的值。如果返回了 REF CURSOR,而不是返回了 REF CURSOR 所指向的第一行第一列的值,则该方法会返回一个空引用。OracleCommand 类的 ExecuteScalar() 方法类似于 ExecuteOracleScalar() 方法,只不过它将值作为 .NET 框架数据类型返回。
尽管如此,在使用 Oracle 存储过程时,这两个方法都没有用。Oracle 存储过程不能将值作为 RETURN 语句的一部分返回,而只能将其作为 OUT 参数返回。有关信息,请参阅不返回数据的存储过程一节。同时,除了通过 REF CURSOR 输出参数以外,您不能返回结果集。下一节将对此进行讨论。
您只能使用 RETURN 参数检索 Oracle 函数的返回值(如上一节所述),而不能使用 ExecuteScalar 方法之一进行检索。
序列
Oracle 使用序列 来生成唯一编号,而不是使用 SQL Server 所用的数据类型 uniqueidentifier。无论是哪种情况,主要用途都是为主键列生成一系列唯一编号。与 uniqueidentifier 数据类型不同,序列是与将其用于主键值的一个或多个表无关的数据库对象。
Oracle 序列是原子对象,并且是一致的。也就是说,一旦您访问一个序列号,Oracle 将在处理下一个请求之前自动递增下一个编号,从而确保不会出现重复值。
可以使用 CREATE SEQUENCE 命令创建 Oracle 序列。该命令所带参数包括增量、起始值、最大值、循环和缓存。可使用 NEXTVAL 和 CURRVAL 关键字访问序列值。NEXTVAL 返回序列中的下一个编号,而 CURRVAL 提供对当前值的访问。HR 架构中的序列 LOCATIONS_SEQ 按如下方式定义:
CREATE SEQUENCE LOCATIONS_SEQ
    INCREMENT BY 100
    START WITH 1
    MAXVALUE 9900
    MINVALUE 1
    NOCYCLE 
    NOCACHE
    NOORDER
大多数序列代码是不言自明的。NOCYCLE 表示序列在达到最小值或最大值后将不再生成其他值。NOCACHE 表示序列值在被请求之前不会进行分配;可使用预分配机制来改善性能。NOORDER 表示在生成编号时,不能保证按照请求编号的顺序返回这些编号。
下面的代码显示了一个存储过程,该过程请求一个序列值,在向 LOCATIONS 表中插入记录时使用它设置主键值,然后在 OUT 参数中返回该主键值。
CREATE OR new PROCEDURE ADD_LOCATION (
    p_location_id OUT NUMBER,
    p_street_address IN VARCHAR2,
    p_postal_code IN VARCHAR2,
    p_city IN VARCHAR2,
    p_state_province IN VARCHAR2,
    p_country_id IN CHAR
)
AS
BEGIN
    INSERT INTO LOCATIONS (
        LOCATION_ID,
        STREET_ADDRESS,
        POSTAL_CODE,
        CITY,
        STATE_PROVINCE,
        COUNTRY_ID)
    VALUES (
        LOCATIONS_SEQ.NEXTVAL,
        p_street_address,
        p_postal_code,
        p_city,
        p_state_province,
        p_country_id
    );
    
    SELECT LOCATIONS_SEQ.CURRVAL INTO p_location_id FROM DUAL;
END ADD_LOCATION;


下面的代码调用该存储过程,以插入一个记录并检索返回的序列值。
// create the connection
OracleConnection conn = new OracleConnection("Data Source=oracledb;
    User Id=UserID;Password=Password;");
// create the command for the stored procedure
OracleCommand cmd = new OracleCommand();
cmd.Connection = conn;
cmd.CommandText = "ADD_LOCATION";
cmd.CommandType = CommandType.StoredProcedure;
// add the parameters for the stored procedure including the LOCATION_ID
// sequence value that is returned in the output parameter p_location_id
cmd.Parameters.Add("p_location_id", OracleType.Number).Direction =
    ParameterDirection.Output;
cmd.Parameters.Add("p_street_address", OracleType.VarChar).Value =
    "123 Any Street";
cmd.Parameters.Add("p_postal_code", OracleType.VarChar).Value = "33040";
cmd.Parameters.Add("p_city", OracleType.VarChar).Value = "Key West";
cmd.Parameters.Add("p_state_province", OracleType.VarChar).Value = "FL";
cmd.Parameters.Add("p_country_id", OracleType.VarChar).Value = "US";
// execute the command to add the records      
OracleString rowId;
conn.Open();
int rowsAffected = cmd.ExecuteOracleNonQuery(out rowId);
conn.Close();
// output the results
Console.WriteLine("Rows affected: " + rowsAffected);
Console.WriteLine("Location ID: " +
    cmd.Parameters["p_location_id"].Value);
控制台显示一个记录被插入到该表中,同时还插入了该序列生成的主键值。
Rows affected: 1
Location ID: 3300
使用 DataAdapter 填充数据集
可使用 REF CURSOR 通过 DataAdapter 来填充 DataSet。下面的代码利用了使用 DataReader 一节中定义的存储过程 GetJobHistoryByEmployeeId,并用它在 REF CURSOR 输出参数中返回的结果集来填充 DataSet。
以下是使用 DataAdapter 填充 DataSet 的代码:
// create the connection
OracleConnection conn = new OracleConnection("Data Source=oracledb;
    User Id=UserID;Password=Password;");
// create the command for the stored procedure
OracleCommand cmd = new OracleCommand();
cmd.Connection = conn;
cmd.CommandText = "SELECT_JOB_HISTORY.GetJobHistoryByEmployeeId";
cmd.CommandType = CommandType.StoredProcedure;
// add the parameters for the stored procedure including the REF CURSOR
// to retrieve the result set
cmd.Parameters.Add("p_employee_id", OracleType.Number).Value = 101;
cmd.Parameters.Add("cur_JobHistory", OracleType.Cursor).Direction =
    ParameterDirection.Output;
// createt the DataAdapter from the command and use it to fill the
// DataSet
OracleDataAdapter da = new OracleDataAdapter(cmd);
DataSet ds = new DataSet();
da.Fill(ds);
// output the results.
Console.WriteLine(ds.Tables[0].Rows.Count);
对于 HR 架构的默认安装,输出表明员工 101 有两个 JOB_HISTORY 记录。

 

用ADO.NET访问Oracle9i存储过程(下)(1) 第 [1] [2] [3] [4]  下一页

 

 

上下文章:

 

上一篇文章: 用ADO.NET访问Oracle9i存储过程(上) 下一篇文章: Oracle冷备份的不完全恢复(上)

相关文章:

  • 访问统计上的陷阱,值得站长的你我他关注
  • 在ORACLE的存储过程中如何做简单的动态查询
  • Oracle开发人员JAVA存储过程
  • oracle+jsp中blob存储大文本
  • 编写一个接受变量的存储过程

相关软件:

  • 刷网页访问量工具 V1.3
  • 网络存储服务器 V2.0
  • 操作系统 -- 安装过程详细图解 一步步教你(图片)从98版到Linux
  • 全面质量管理过程控制系统 V2.2
  • PHP+MYSQL访问统计系统
  • 风雨飘然访问统计系统(PHP版)

 

 

快速导航

  • 网络学院
  • 精品汇聚
  • 字体下载
  • 教程下载
  • ASP源码
  • PHP源码
  • Net源码
  • JSP 源码

Oracle认证分类导航

  • Oracle动态
  • Oracle指导
  • Oracle题库

本类经典文章推荐

  • Oracle中关于逻辑备份与恢复
  • Oracle开发人员JAVA存储过程
  • 为数据库的表自动生成行号
  • Oracle中的OOP概念
  • 用java从oracle取数
  • 冷备份移植到另一台Solaris机器上
  • 如何将excel数据导入oracle中
  • Oracle10.2g安装记录
  • 数据库监控工具ForOraclev1.2
  • oracle双机群集系统

Oracle指导阅读排行

  • Oracle系统表查询
  • 实例:Oracle导出EXCEL文件
  • Oracle企业管理器(OEM 2.1)使用...
  • 实例:Oracle导出EXCEL文件
  • Tomcat+SQLServer连接池配置
  • 服务器和客户机是怎样连接的
  • 入门基础:连接常见错误及解决方法
  • ORACLE数据库简介
  • 如何将excel数据导入oracle中
  • 如何取出某一用户的密码 再原样改...

Oracle认证阅读总排行

  • Oracle系统表查询
  • 实例:Oracle导出EXCEL文件
  • Oracle企业管理器(OEM 2.1)使用...
  • 在ORACLE的存储过程中如何做简单的...
  • 实例:Oracle导出EXCEL文件
  • AIX下自动启动Oracle数据库与监听...
  • Tomcat+SQLServer连接池配置
  • 服务器和客户机是怎样连接的
  • 入门基础:连接常见错误及解决方法
  • ORACLE数据库简介

广告位置

字母检索 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 回到顶部

关于我们 | 版权声明 | 免责条款 | 广告联系 | 软件发布 | 下载帮助 | 下载排行 | 网站地图 | 特别鸣谢 | 友情连接

copyright; 2005-2008 D9soft.com 第九软件网 版权所有