代码改变世界

如何调用 Oracle 存储过程在 Visual Basic.NET 使用 Microsoft Oracle 托管提供程序

2009-07-10 13:31  Kevin-wang  阅读(247)  评论(0编辑  收藏  举报

摘自:http://support.microsoft.com/kb/321718

创建 Oracle 表

 

此示例使用在 Oracle 中定义的表 Scott/Tiger 架构。 默认,Oracle Scott/Tiger 架构附带标准 Oracle 安装。

如果不存在此架构,必须运行以下的"创建表和插入"脚本,表:
CREATE TABLE DEPT
(DEPTNO NUMBER(2,0) NOT NULL,
DNAME VARCHAR2(14) NULL,
LOC VARCHAR2(13) NULL,
PRIMARY KEY (DEPTNO)
);

INSERT INTO Dept VALUES(11,'Sales','Texas');
INSERT INTO Dept VALUES(22,'Accounting','Washington');
INSERT INTO Dept VALUES(33,'Finance','Maine');

CREATE TABLE EMP
(EMPNO NUMBER(4,0) NOT NULL,
ENAME VARCHAR2(10) NULL,
JOB VARCHAR2(9) NULL,
MGR NUMBER(4,0) NULL,
HIREDATE DATE NULL,
SAL NUMBER(7,2) NULL,
COMM NUMBER(7,2) NULL,
DEPTNO NUMBER(2,0) NULL,
FOREIGN KEY (DEPTNO) REFERENCES DEPT(DEPTNO),
PRIMARY KEY (EMPNO)
);

INSERT INTO Emp VALUES(123,'Bob','Sales',555,'28-JAN-79',35000,12,30);
INSERT INTO Emp VALUES(321,'Sue','Finance',555,'12-MAY-83',42000,12,10);
INSERT INTO Emp VALUES(234,'Mary','Account',555,'14-AUG-82',33000,12,20);

创建 Oracle 包

Oracle 服务器上创建以下 Oracle 包:
CREATE OR REPLACE PACKAGE curspkg_join AS 
TYPE t_cursor IS REF CURSOR ;
Procedure open_join_cursor1 (n_EMPNO IN NUMBER, io_cursor IN OUT t_cursor);
END curspkg_join;
/
Oracle 服务器上创建以下 Oracle 程序包正文:
CREATE OR REPLACE PACKAGE BODY curspkg_join AS
Procedure open_join_cursor1 (n_EMPNO IN NUMBER, io_cursor IN OUT t_cursor)
IS
v_cursor t_cursor;
BEGIN
IF n_EMPNO <> 0
THEN
OPEN v_cursor FOR
SELECT EMP.EMPNO, EMP.ENAME, DEPT.DEPTNO, DEPT.DNAME
FROM EMP, DEPT
WHERE EMP.DEPTNO = DEPT.DEPTNO
AND EMP.EMPNO = n_EMPNO;

ELSE
OPEN v_cursor FOR
SELECT EMP.EMPNO, EMP.ENAME, DEPT.DEPTNO, DEPT.DNAME
FROM EMP, DEPT
WHERE EMP.DEPTNO = DEPT.DEPTNO;

END IF;
io_cursor := v_cursor;
END open_join_cursor1;
END curspkg_join;
/

创建 Visual Basic.NET 应用程序

  1. 请按照下列步骤创建 Visual Basic Windows 应用程序项目:
    1. 启动 Microsoft Visual Studio.NET。
    2. 文件 菜单上指向 新建 ,然后单击 项目
    3. 单击 项目类型 下的 Visual Basic 项目 ,然后单击 模板 下的 Windows 应用程序 。 默认,Form 1 添加到项目。
  2. 项目 菜单上单击 添加引用 ,并将引用设置为 System.Data.OracleClient。
  3. 将一个 Button 控件和一个 DataGrid 控件从工具箱拖到窗体。
  4. 在代码窗口的顶部添加以下代码:
    Imports System.Data.OracleClient
  5. 将以下代码添加到 Form 1 的 Button 1 _ Click 事件:
    Dim x As Exception
    Dim Ds As New DataSet()
    Dim Oraclecon As New OracleConnection("Server=YourOracle;Uid=uid;Pwd=pwd")


    Oraclecon.Open()


    Dim myCMD As New OracleCommand()
    myCMD.Connection = Oraclecon
    myCMD.CommandText = "curspkg_join.open_join_cursor1"
    myCMD.CommandType = CommandType.StoredProcedure
    myCMD.Parameters.Add(New OracleParameter("n_empno", OracleType.Number)).Value = 123
    myCMD.Parameters.Add(New OracleParameter("io_cursor", OracleType.Cursor)).Direction = ParameterDirection.Output


    Dim MyDA As New OracleDataAdapter(myCMD)

    Try

    MyDA.Fill(Ds)
    Catch x
    MessageBox.Show(x.Message.ToString)
    End Try



    DataGrid1.DataSource = Ds.Tables(0)

    Oraclecon.Close()
  6. 修改适合您的环境 OracleConnection 字符串。
  7. 按 F 5 编译并运行该应用程序。