【问题标题】:C# Oracle database references to PL/SQL cursorC# Oracle 数据库对 PL/SQL 游标的引用
【发布时间】:2021-05-01 15:01:46
【问题描述】:

我有一个名为generuj_cene_wypoz()的游标,游标在数据库中工作,但我不知道如何在C#中正确调用它,顺便说一下程序和数据库之间的连接工作。

    public void question2(string name)
    {
        OracleCommand cmd = con.CreateCommand();
        cmd.CommandText = name;
        cmd.CommandType = CommandType.StoredProcedure;
        OracleDataReader dr = cmd.ExecuteReader();
        DataTable dt = new DataTable();
        dt.Load(dr);
        myDataGrid.ItemsSource = dt.DefaultView;
        dr.Close();
    }

    private void Button_Click_1(object sender, RoutedEventArgs e)
    {
        question2("exec generuj_cene_wpoz()");
    }

连接到我正在使用的数据库

Oracle.ManagedDataAccess.Client;
Oracle.ManagedDataAccess.Types;

【问题讨论】:

    标签: c# oracle plsql oracle11g


    【解决方案1】:

    这是一个有用的例子。

    首先是一个在 oracle 中返回引用光标的函数

    create or replace package test_PKG as 
    
    function test_rpt (p_testid number) return sys_refcursor;
    
    end test_PKG;
    
    create or replace package body test_PKG as
    
    function test_rpt (p_testid number) return sys_refcursor as
    
    test_rpt_cur sys_refcursor;
    
    begin 
    
    open test_rpt_cur for
    
    select 1 as id_info from dual;
     
    return test_rpt_cur;
    
    end test_rpt;
    
    test_PKG
    

    C#代码

    public Datatable pop_test_rpt (int p_testid_app)
    {
    
        using (OracleConnection myconn = new OracleConnection(string_connection_info)
        {
            const string _default_cursor_name = "1";
            myconn.Open();
            OracleCommand cmd = new OracleCommand ("test_schema.test_PKG.test_rpt", myconn)
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.Add(_default_cursor_name, OracleDBType.RefCursor, ParamaterDirection.ReturnValue); 
            cmd.Parameters.Add("p_testid", OracleDBType.Int32).Value = p_testidapp;
             DataTable dt = new DataTable();
             dt.Load(cmd.ExecuteReader());
             myconn.close();
             return dt;
          }
      }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-07
      • 2023-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多