使用ADO.NET访问Oracle 9i存储过程(下)
2007-05-13 12:30:03 来源:WEB开发网核心提示: 使用 DataAdapter 更新 Oracle当您使用 REF CURSOR 参数填充 DataSet 时,不能简单地使用 OracleDataAdapter 的 Update() 方法,使用ADO.NET访问Oracle 9i存储过程(下)(5),这是因为在执行存储过程时,Oracle
使用 DataAdapter 更新 Oracle
当您使用 REF CURSOR 参数填充 DataSet 时,不能简单地使用 OracleDataAdapter 的 Update() 方法。这是因为在执行存储过程时,Oracle 不能提供确定表名和列名所需的信息。要使用 DataAdapter 的 Update() 方法,您必须创建在基础表中更新、插入和删除记录的过程。该方法类似于在 SQL Server 中使用的方法。
本节说明如何生成一个可以处理所需的创建、检索、更新和删除操作的包,以便能够从 Oracle 数据库中检索 LOCATION 数据,也能够将对 DataSet 数据所做的不连续更改重新更新到 Oracle 数据库。包头如下所示:
CREATE OR new PACKAGE CRUD_LOCATIONS AS
TYPE T_CURSOR IS REF CURSOR;
PROCEDURE GetLocations (cur_Locations OUT T_CURSOR);
PROCEDURE UpdateLocations (
p_location_id IN 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);
PROCEDURE DeleteLocations (p_location_id IN NUMBER);
PROCEDURE InsertLocations (
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);
END CRUD_LOCATIONS;
包正文如下所示:
CREATE OR new PACKAGE BODY CRUD_LOCATIONS AS
-- retrieve all LOCATION records
PROCEDURE GetLocations (cur_Locations OUT T_CURSOR)
IS
BEGIN
OPEN cur_Locations FOR
SELECT * FROM LOCATIONS;
END GetLocations;
-- update a LOCATION record
PROCEDURE UpdateLocations (
p_location_id IN 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)
IS
BEGIN
UPDATE LOCATIONS
SET
STREET_ADDRESS = p_street_address,
POSTAL_CODE = p_postal_code,
CITY = p_city,
STATE_PROVINCE = p_state_province,
COUNTRY_ID = p_country_id
WHERE
LOCATION_ID = p_location_id;
END UpdateLocations;
-- delete a LOCATION record
PROCEDURE DeleteLocations (p_location_id IN NUMBER)
IS
BEGIN
DELETE FROM LOCATIONS
WHERE LOCATION_ID = p_location_id;
END DeleteLocations;
-- insert a LOCATION record
PROCEDURE InsertLocations
(
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 InsertLocations;
END CRUD_LOCATIONS;
下面的代码定义了一个 DataAdapter,从而使用上述包中定义的过程来创建、检索、更新和删除支持 DataAdapter 的数据。DataAdapter 既可用来将数据检索到 DataSet 中,也可用来将对 DataSet 所做的更改更新到 Oracle 数据库中。
[]
- ››使用脚本恢复WinXP系统的用户登录密码
- ››使用phpMyadmin创建数据库及独立数据库帐号
- ››使用Zend Framework框架中的Zend_Mail模块发送邮件...
- ››使用cout标准输出如何控制小数点后位数
- ››使用nofollow标签做SEO的技巧
- ››使用 WebSphere Message Broker 的 WebSphere Tra...
- ››使用SQL Server事件探查器做应用程序的性能分析
- ››使用SQL Server事件探查器分析死锁原因
- ››Adobe发布Acrobat X 不支持苹果iOS系统
- ››使用纯文本文件打造WCF服务
- ››使用 Dojo 开发定制 Business Space 小部件,第 4...
- ››使用 ADDRESS 与 INDIRECT函数查询信息
更多精彩
赞助商链接