zoukankan      html  css  js  c++  java
  • C#调用ORACLE存储过程返回结果集及函数

    ORACLE段:
    首先在ORACLE建立PACKAGE和PACKAGE BODY,将在这里面定义函数和存储过程返回结果集。
    1:建立PACKAGE:
    CREATE OR REPLACE package SCOTT.pk_wt
    is
    type mytype is ref cursor;
    procedure p_wt(mycs out mytype);
    function f_get(str in varchar2)
    return varchar2;
    end;
    /
    说明:其实PACKAGE只是个声明罢了。我们在这里定义了一个存储过程返回结集和一个函数,返回字符串。

    2:建立PACKAGE BODY:
    CREATE OR REPLACE package BODY SCOTT.pk_wt
    is
    procedure p_wt(mycs out mytype)
    is
    begin
    open mycs for select * from test;
    end p_wt;

    function f_get(str varchar2)
    return varchar2
    is
    str_temp varchar2(100) := ''good luck!'';
    begin
    str_temp := str_temp || str;
    return str_temp;
    end f_get;

    end pk_wt;
    /
    说明:这里建立PACKAGE BODY是具体的说明和使用,将采用什么方式实现。。

    C#段:
    在C#中代码将分为两部分,一部分是使用函数,另外一部分是使用结果集。
    定义一个连接,从WEBCONFIG里去取得:
    private OracleConnection orcn=new OracleConnection(System.Configuration.ConfigurationSettings.AppSettings["scott"]);
    C#调用ORACLE函数:
    OracleCommand cmd=new OracleCommand("pk_wt.f_get",orcn);
    cmd.CommandType=CommandType.StoredProcedure;
    OracleParameter p1=new OracleParameter("str",OracleType.VarChar,10);
    p1.Direction=System.Data.ParameterDirection.Input;
    p1.Value=this.TextBox1.Text;
    OracleParameter p2=new OracleParameter("result",OracleType.VarChar,100);
    p2.Direction=System.Data.ParameterDirection.ReturnValue;
    cmd.Parameters.Add(p1);
    cmd.Parameters.Add(p2);
    orcn.Open();
    cmd.ExecuteNonQuery();
    orcn.Close();
    this.Button_function.Text=p2.Value.ToString();
    其中RESULT是系统自定义的函数返回变量,特别要注意的是,函数的参数的返回类型要指定,另外就是COMMAND类型也需要指定,另外和一般的存储过程没什么差别。

    C#调用ORACLE返回结果集:
    OracleCommand cmd=new OracleCommand("pk_wt.p_wt",orcn);
    cmd.CommandType=CommandType.StoredProcedure;
    OracleParameter p1=new OracleParameter("mycs",OracleType.Cursor);
    p1.Direction=System.Data.ParameterDirection.Output;
    cmd.Parameters.Add(p1);
    OracleDataAdapter da=new OracleDataAdapter(cmd);
    DataSet ds=new DataSet();
    da.Fill(ds,"test");
    this.DataGrid1.DataSource=ds;
    this.DataGrid1.DataBind();
    这里没什么可说的类。。只是定义的数据类型是游标,类型是OUTPUT,另外没什么了。。

    个人总结:
    ORACLE的PACKAGE和PACKAGE BODY将是我们返回结集和使用函数的唯一方法,这一定要好好学习。。
  • 相关阅读:
    1-直播转点播
    3-美团 HTTP 服务治理实践
    3-SSDB 高性能NoSQL数据库, 用于替代 Redis.
    配置kubectl在Mac(本地)远程连接Kubernetes集群
    4-rocketmq 发送时异常:system busy 和 broker busy 解决方案
    3-RocketMQ 简单梳理 及 集群部署笔记
    2-Rocketmq产品架构(参考阿里云)
    1-RocketMq 学习 中文文档(一)
    tar命令参数详解
    Ubuntu 安装 .bundle 文件
  • 原文地址:https://www.cnblogs.com/zwei1121/p/788115.html
Copyright © 2011-2022 走看看