sql >> Database >  >> RDS >> Oracle

Wat is de juiste odbc-opdracht voor het aanroepen van de Oracle-opgeslagen procedure met parameters van .Net?

Ik gebruik .NET 3.5 en Oracle 10gR2. Ik heb een uitvoerparameter toegevoegd als reactie op je opmerking.

Server , Uid , en Pwd zijn veranderd om de onschuldigen te beschermen. Stel ze in op de juiste waarden.

Mijn opgeslagen procedure:

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

Mijn testcode:

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

Bij gebruik van OUT of IN OUT parameters, de Size eigenschap van de OdbcParameter moet op een adequate waarde worden ingesteld.

In antwoord op uw opmerking over het afhandelen van uitzonderingen, zou ik willen dat de beller van de methode voor gegevenstoegang de uitzonderingen afhandelt. Met de using constructie, de Dispose methode wordt automatisch aangeroepen op de opdracht- en verbindingsobjecten, of er nu een uitzondering is of niet.




  1. Is er een automatische manier om een ​​rollback-script te genereren bij het invoegen van gegevens met LINQ2SQL?

  2. UPDATE meerdere tabellen in MySQL met LEFT JOIN

  3. MySQL:Ontvang de nieuwste items ouder dan xxx, Prestaties

  4. Migratie schrijven om de primaire sleutel van het model te wijzigen met ManyToManyField