Oracle
 sql >> Database >  >> RDS >> Oracle

Qual è il comando odbc corretto per chiamare la stored procedure Oracle con parametri da .Net?

Sto eseguendo .NET 3.5 e Oracle 10gR2. Ho aggiunto un parametro di output in risposta al tuo commento.

Server , Uid e Pwd sono stati modificati per proteggere gli innocenti. Impostali su valori appropriati.

La mia procedura memorizzata:

create or replace
procedure test_proc(p1 in number, p2 in out varchar2) is
begin
  p2 := to_char(p1 + to_number(p2));
end;

Il mio codice di prova:

using System;
using System.Data;
using System.Data.Odbc;

class OdbcTest
{
    const string connectionString =
        @"Driver={Microsoft ODBC for Oracle};" +
        @"Server=MyTnsName;" +
        @"Uid=MySchema;" +
        @"Pwd=MyPassword;";

    public static string TryMe()
    {
        using (var odbcConn = new OdbcConnection(connectionString))
        using (var odbcCommand = odbcConn.CreateCommand())
        {
            odbcCommand.CommandText = "{ CALL test_proc(?, ?) }";
            odbcCommand.CommandType = CommandType.StoredProcedure;

            odbcCommand.Parameters.Add("p1", OdbcType.Decimal).Value = 42;
            var p2 = odbcCommand.Parameters.Add("p2", OdbcType.VarChar, 30);
            p2.Direction = ParameterDirection.InputOutput;
            p2.Value = "25";

            odbcConn.Open();
            odbcCommand.ExecuteNonQuery();

            return p2.Value as string; // returns 67
        }
    }
}

Quando si utilizza OUT o IN OUT parametri, il Size proprietà del OdbcParameter deve essere impostato su un valore adeguato.

In risposta al tuo commento sulla gestione delle eccezioni, vorrei che il chiamante del metodo di accesso ai dati gestisse le eccezioni. Con il using costrutto, il Dispose il metodo verrà chiamato automaticamente sul comando e sugli oggetti di connessione indipendentemente dal fatto che sia presente un'eccezione o meno.