如何在C#中捕获存储过程查询或打印输出

时间:2018-01-16 20:21:59

标签: c# asp.net oracle11g

我有一个像这样的存储过程

  PROCEDURE PRC_ABCD (resultset_out out TYPES.cursorType) 
  AS
      SELECT * FROM ABCD;
  END PRC_ABCD ;

我的C#代码就像这样

  string cnn = "connectionstring";

  OracleConnection conn = new OracleConnection(cnn);
  conn.Open();

  var cmd = adapter.CreateSpCommand(con, "PRC_ABCD");
  cmd = adapter.outField(cmd, "resultset_out", OracleDbType.RefCursor);
   using (var reader = cmd.ExecuteReader())
   {

      while (reader.Read())
      {
         yield return Total.FromDataReader(reader, vProductCount, vProductAreaCount, vMonitoredByCount, customerCount);
      }
   }

我的问题是如何在控制台消息中看到PRC_ABCD的结果,或者如何打印查询SELECT * FROM ABCD?有人对此有任何信息吗?

1 个答案:

答案 0 :(得分:0)

返回引用游标的函数可能更容易使用:

SQL> create table abcd as
  2    select employee_id, first_name, salary from employees
  3    where rownum <= 5;

Table created.

SQL> create or replace function f_abcd
  2    return sys_refcursor
  3  is
  4    cur_r sys_refcursor;
  5  begin
  6    open cur_r for select * from abcd;
  7    return cur_r;
  8  end;
  9  /

Function created.

SQL> select f_abcd from dual;
CURSOR STATEMENT : 1

CURSOR STATEMENT : 1
        100 Steven                    24000
        101 Neena                     17000
        102 Lex                       17000
        103 Alexander                  9000
        104 Bruce                      6000

但是,如果您必须使用某个程序,那么您可以执行以下操作:

SQL> create or replace procedure p_abcd (par_out out sys_refcursor)
  2  is
  3  begin
  4    open par_out for select * from abcd;
  5  end;
  6  /

Procedure created.

SQL> var l_out refcursor;
SQL> begin p_abcd(:l_out); end;
  2  /

PL/SQL procedure successfully completed.

SQL> print :l_out
        100 Steven                    24000
        101 Neena                     17000
        102 Lex                       17000
        103 Alexander                  9000
        104 Bruce                      6000

SQL>

不幸的是,那是我达到极限的地方;我对C#或asp.net一无所知,所以我无法向您展示如何在这些语言中使用上述代码。遗憾。