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

Hvad er den rigtige odbc-kommando til at kalde Oracles lagrede procedure med parametre fra .Net?

Jeg kører .NET 3.5 og Oracle 10gR2. Jeg har tilføjet en outputparameter som svar på din kommentar.

Server , Uid og Pwd er blevet ændret for at beskytte de uskyldige. Indstil dem til passende værdier.

Min lagrede procedure:

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

Min testkode:

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

Når du bruger OUT eller IN OUT parametre, Size egenskaben for OdbcParameter skal indstilles til en passende værdi.

Som svar på din kommentar vedrørende håndtering af undtagelser, vil jeg have den, der ringer til dataadgangsmetoden, til at håndtere undtagelser. Med using konstruktion, Dispose metoden kaldes automatisk på kommando- og forbindelsesobjekterne, uanset om der er en undtagelse eller ej.




  1. Mysql - find samtale, der kun holdes af to brugere

  2. Brug af Postgresql JDBC-kilde med Apache Spark på EMR

  3. Problemer med at forbinde data til MySQL

  4. Jeg skal ændre datoformatet ved hjælp af php