oraclehelper filldataset или другой способ получить значения SYS_REFCURSOR в ASP.NET - PullRequest
0 голосов
/ 29 ноября 2010

Кому он может ответить,

Мы разрабатываем наш проект с использованием .net framework 4.0, Oracle 11gR2.Проблема в том, что мы должны использовать класс Oraclehelper, никаких других опций, и мы не можем получить значения SYS_REFCURSOR.Когда мы гуглили, мы обнаружили, что некоторые страницы пишут о методе filldataset класса oraclehelper, но этот класс не существует в нашем классе Oraclehelper.

Любые обходные пути, шаблоны, примеры и т. Д. Для получения значений SYS_REFCURSOR через класс Oraclehelper?

Спасибо за беспокойство,

С наилучшими пожеланиями,

КайханYÜKSEL

1 Ответ

0 голосов
/ 29 ноября 2010

при условии, что вы используете sourceforge.net/projects/oraclehelpernet "oraclehelper", это сборка поверх ODP (т.е. Oracle.DataAccess.Client), все, что вам нужно сделать, это: (это от http://download.oracle.com/docs/cd/B28359_01/win.111/b28375/featRefCursor.htm)

String cmdTxt1 = "begin open :1 for select col1 from test; end;";
OracleCommand cmd = new OracleCommand(cmdTxt1, conn);
OracleParameter outRefPrm = cmd.Parameters.Add("outRefPrm",
      OracleDbType.RefCursor, DBNull.Value, ParameterDirection.Output);
    cmd.ExecuteNonQuery(); // Execute the anonymous PL/SQL block

Вы также можете посмотреть в% oracle_home% \ client_1 \ odp.net \ samples \ 4 \ RefCursor 7 примеров (это когда ODP установлен, что есть)

Поскольку OracleHelper просто создаетОбертка вокруг ODP, все, что вам нужно сделать, это создать параметр как OracleDbType.RefCursor и передать его в вызов (будь то выполнение без запроса, чтение данных или еще много чего)

сейчассделать это с помощью процедуры:

PROCEDURE Get1CurOut(p_cursor1 out refCursor) is 
      BEGIN 
      OPEN p_cursor1 for select * from emp; 
      END Get1CurOut; 

и C #

OracleCommand cmd = new OracleCommand("Get1CurOut", con);
      cmd.CommandType = CommandType.StoredProcedure;

      // Bind 
OracleParameter oparam = cmd.Parameters.Add("refcursor", OracleDbType.RefCursor);
  oparam.Direction = ParameterDirection.Output;

      try 
      {
        // Execute command; Have the parameters populated
        cmd.ExecuteNonQuery();

        // Create the OracleDataAdapter
        OracleDataAdapter da = new OracleDataAdapter(cmd);

        // Populate a DataSet with refcursor1.
        DataSet ds = new DataSet();
        da.Fill(ds, "refcursor1", (OracleRefCursor)(cmd.Parameters["refcursor1"].Value));

        // Print out the field count the REF Cursor
        Console.WriteLine("Field count: " + ds.Tables["refcursor1"].Columns.Count);
      }

это поднято (с небольшими изменениями) из% oracle_home% \ client_1 \ odp.net \ samples \4 \ RefCursor \ sample1.cs

Вот пример (не проверенный) OracleHelper:

string connectionString = "User Id=scott;Password=tiger;Data Source=oracle";
CommandType commandType  = CommandType.StoredProcedure;
string commandText = "Get1CurOut";

OracleParameter oparam = cmd.Parameters.Add("refcursor", OracleDbType.RefCursor);
      oparam.Direction = ParameterDirection.Output;



 OracleDataReader reader;

        reader = OracleHelper.ExecuteReader(connectionString, commandType, commandText, oparam) ;

        // show the first row
        reader.Read();

        // Print out SCOTT.EMP EMPNO column
        Console.WriteLine("EMPNO: {0}", reader.GetDecimal(0));

        // Print out SCOTT.EMP ENAME column
        Console.WriteLine("ENAME: {0}", reader.GetString(1));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...