sql >> Base de Datos >  >> RDS >> Oracle

¿Cuál es el comando odbc adecuado para llamar al procedimiento almacenado de Oracle con parámetros de .Net?

Estoy ejecutando .NET 3.5 y Oracle 10gR2. He agregado un parámetro de salida en respuesta a su comentario.

Server , Uid y Pwd han sido cambiados para proteger a los inocentes. Ajústelos a los valores apropiados.

Mi procedimiento almacenado:

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

Mi código de prueba:

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
        }
    }
}

Al usar OUT o IN OUT parámetros, el Size propiedad del OdbcParameter debe establecerse en un valor adecuado.

En respuesta a su comentario sobre el manejo de excepciones, haría que la persona que llama del método de acceso a datos maneje las excepciones. Con el using construir, el Dispose El método se llamará automáticamente en los objetos de comando y conexión, ya sea que haya una excepción o no.