Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

Oracle Sql क्वेरी के भीतर से एक sql वैरिएबल का मान वापस .NET कोड पर लौटाएँ

आप ODP.NET का उपयोग करना चाहेंगे। (ओरेकल के ओरेकल डेटा एक्सेस कंपोनेंट्स):

इसका एक उदाहरण नीचे है। ध्यान दें कि ODP.NET में, आप एक पैरामीटर दिशा (इनपुट, इनपुटआउटपुट, आउटपुट, रिटर्नवैल्यू) स्थापित कर सकते हैं जो आपके द्वारा चलाए जा रहे प्रक्रिया या कथन के पैरामीटर के अनुरूप हो। इस उदाहरण में, मैं एक रिटर्नवैल्यू को पकड़ रहा हूं, जो एक आईडी है जो डीबी द्वारा अनुक्रम और ट्रिगर के माध्यम से उत्पन्न होता है (जहां तक ​​​​.NET ऐप का संबंध है, इसे स्वचालित रूप से बनाया गया है):

int event_id = 0;
using (OracleConnection oraConn = new OracleConnection(connStr))
{
    string cmdText = @"insert into EVENT
        (EVENT_NAME, EVENT_DESC)
        values
        (:EVENT_NAME, :EVENT_DESC)
        RETURNING EVENT_ID INTO :EVENT_ID
        ";

    using (OracleCommand cmd = new OracleCommand(cmdText, oraConn))
    {
        oraConn.Open();
        OracleTransaction trans = oraConn.BeginTransaction();
        try
        {
            OracleParameter prm = new OracleParameter();
            cmd.BindByName = true;
            prm = new OracleParameter("EVENT_NAME", OracleDbType.Varchar2); 
            prm.Value = "SOME NAME"; cmd.Parameters.Add(prm);

            prm = new OracleParameter("EVENT_DESC", OracleDbType.Varchar2); 
            prm.Value = "SOME DESC"; cmd.Parameters.Add(prm);

            prm = new OracleParameter( "EVENT_ID"
                                     , OracleDbType.Int32
                                     , ParameterDirection.ReturnValue); 
            cmd.Parameters.Add(prm);

            cmd.ExecuteNonQuery();
            trans.Commit();
            // return value
            event_id = ConvertFromDB<int>(cmd.Parameters["EVENT_ID"].Value);
        }
        catch
        {
            trans.Rollback();
            throw;
        }
        finally
        {
            trans.Dispose();
        }
        oraConn.Close();
    }
} 

ConvertFromDB अपने .NET समकक्ष (इस मामले में एक int) के लिए वापसी मूल्य डालने के लिए सिर्फ एक सामान्य है।

आशा है कि यह मदद करता है।

संपादित करें:

आप आसानी से ODP.NET में मानों की एक सरणी को बाँध सकते हैं (और वापसी मूल्यों की एक सरणी को पुनः प्राप्त कर सकते हैं):

using (OracleConnection oraConn = new OracleConnection(connStr))
{
    string cmdText = @"insert into TEST_EVENT
        (EVENT_NAME, EVENT_DESC)
        values
        (:EVENT_NAME, :EVENT_DESC)
        RETURNING EVENT_ID INTO :EVENT_ID
        ";

    using (OracleCommand cmd = new OracleCommand(cmdText, oraConn))
    {
        oraConn.Open();
        OracleTransaction trans = oraConn.BeginTransaction();
        try
        {
            string[] event_names = new string[2];
            string[] event_descs = new string[2];
            int[] event_ids = new int[2];

            event_names[0] = "Event1";
            event_descs[0] = "Desc1";

            event_names[1] = "Event2";
            event_descs[1] = "Desc2";

            OracleParameter prm = new OracleParameter();
            cmd.Parameters.Clear();
            cmd.ArrayBindCount = 2;
            cmd.BindByName = true;

            prm = new OracleParameter("EVENT_NAME", OracleDbType.Varchar2); 
            prm.Value = event_names; cmd.Parameters.Add(prm);

            prm = new OracleParameter("EVENT_DESC", OracleDbType.Varchar2); 
            prm.Value = event_descs; cmd.Parameters.Add(prm);

            prm = new OracleParameter( "EVENT_ID"
                                     , OracleDbType.Int32
                                     , ParameterDirection.ReturnValue); 
            cmd.Parameters.Add(prm);


            cmd.ExecuteNonQuery();
            trans.Commit();
            // get return values

            event_ids = (int[])(cmd.Parameters["EVENT_ID"].Value);
        }
        catch
        {
            trans.Rollback();
            throw;
        }
        finally
        {
            trans.Dispose();
        }
        oraConn.Close();
    }
}



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle 10g पर webapp से javax/xml/namespace/QName क्लास को लिंक करते समय लोडर बाधाओं का उल्लंघन किया गया

  2. Oracle क्लाइंट 11 के साथ .Net एप्लिकेशन परिनियोजित करें

  3. PLSQLDeveloper विंडो के साथ SYS_REFCURSOR कैसे प्रिंट करें?

  4. GitHub पर नमूना स्कीमा

  5. Oracle में पूर्ण बाहरी जुड़ाव का अजीब व्यवहार - इसे कैसे समझाया जा सकता है?