Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Qual é o comando odbc adequado para chamar o procedimento armazenado do Oracle com parâmetros do .Net?


Estou executando .NET 3.5 e Oracle 10gR2. Eu adicionei um parâmetro de saída em resposta ao seu comentário.

Server , Uid e Pwd foram alterados para proteger os inocentes. Defina-os para os valores apropriados.

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

Meu código de teste:
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
        }
    }
}

Ao usar OUT ou IN OUT parâmetros, o Size propriedade do OdbcParameter deve ser ajustado para um valor adequado.

Em resposta ao seu comentário sobre o tratamento de exceções, gostaria que o chamador do método de acesso a dados tratasse de exceções. Com o using construção, o Dispose O método será chamado automaticamente nos objetos de comando e conexão, independentemente de haver uma exceção ou não.