Oracle
 sql >> Base de données >  >> RDS >> Oracle

Quelle est la commande odbc appropriée pour appeler la procédure stockée Oracle avec des paramètres de .Net ?

J'utilise .NET 3.5 et Oracle 10gR2. J'ai ajouté un paramètre de sortie en réponse à votre commentaire.

Server , Uid , et Pwd ont été modifiés pour protéger les innocents. Définissez-les sur les valeurs appropriées.

Ma procédure stockée :

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

Mon code de test :

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

Lors de l'utilisation de OUT ou IN OUT paramètres, la Size propriété du OdbcParameter doit être défini sur une valeur adéquate.

En réponse à votre commentaire concernant la gestion des exceptions, je demanderais à l'appelant de la méthode d'accès aux données de gérer les exceptions. Avec le using construire, le Dispose sera appelée automatiquement sur les objets de commande et de connexion, qu'il y ait une exception ou non.