मेरे पास एक साधारण सी # कंसोल एप्लिकेशन है और इसका कोड इस तरह है:

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Common;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Oracle.ManagedDataAccess.Client;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            SHRSContext shrsContext = new SHRSContext();

            DbCommand cmd = shrsContext.Database.Connection.CreateCommand();

            cmd.CommandText = "PKG_SHRS.GETLOGINATTEMPT";
            cmd.CommandType = CommandType.StoredProcedure;

            var pinUsername = new OracleParameter("pinUsername", OracleDbType.Varchar2, ParameterDirection.Input);
            pinUsername.Value = "admin";

            var poutLoginAttemptCount = new OracleParameter("poutLoginAttemptCount", OracleDbType.Int16, ParameterDirection.Output);

            cmd.Parameters.Add(pinUsername);
            cmd.Parameters.Add(poutLoginAttemptCount);

            cmd.Connection.Open();
            cmd.ExecuteNonQuery();
            cmd.Connection.Close();

            Console.WriteLine(poutLoginAttemptCount.Value.ToString());
            Console.ReadLine();
        }
    }
}

यह बैक-एंड के रूप में इकाई ढांचे और Oracle 11g का उपयोग करता है। यह एक पैकेज PKG_SHRS.GETLOGINATTEMPT में Oracle प्रक्रिया को कॉल करता है और यह पूरी तरह से काम करता है।

उपरोक्त कोड संख्यात्मक डेटा प्रकार के रूप में केवल एक आउटपुट पैरामीटर प्रदान करता है। अगर मुझे आउटपुट पैरामीटर के रूप में एक टेबल SYS_REFCURSOR प्राप्त करने की आवश्यकता है, तो मुझे दिए गए कोड में क्या बदलाव करने की आवश्यकता है?

0
Autumn Valentine 23 मई 2019, 19:06

1 उत्तर

सबसे बढ़िया उत्तर

मुझे लगता है कि VALIDATELOGIN प्रक्रिया का आउटपुट पैरामीटर poutUserCursor है और इसका प्रकार SYS_REFCURSOR है। इस कोड को आजमाएं।

SHRSContext shrsContext = new SHRSContext();

DbCommand cmd = shrsContext.Database.Connection.CreateCommand();

cmd.CommandText = "PKG_SHRS.GETLOGINATTEMPT";
cmd.CommandType = CommandType.StoredProcedure;

var pinUsername = new OracleParameter("pinUsername", OracleDbType.Varchar2, ParameterDirection.Input);
pinUsername.Value = "admin";

// Assuming output parameter in the procedure is poutUserCursor
var poutUserCursor = new OracleParameter("poutUserCursor", OracleDbType.RefCursor, ParameterDirection.Output);

cmd.Parameters.Add(pinUsername);
cmd.Parameters.Add(poutUserCursor);

cmd.Connection.Open();

DbDataReader dr = cmd.ExecuteReader();

string column1 = string.Empty;
string column2 = string.Empty;

// Assume this will return one row. If multiple rows return, use while loop
if (dr.Read())
{
    // GetString will return string type. You can change as you need
    column1 = dr.GetString(0);
    column2 = dr.GetString(1);
}

cmd.Connection.Close();
0
26 मई 2019, 06:28