sql >> Databasteknik >  >> RDS >> Oracle

Vad är det korrekta odbc-kommandot för att anropa Oracles lagrade procedur med parametrar från .Net?

Jag kör .NET 3.5 och Oracle 10gR2. Jag har lagt till en utdataparameter som svar på din kommentar.

Server , Uid och Pwd har ändrats för att skydda de oskyldiga. Ställ in dem på lämpliga värden.

Min lagrade procedur:

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

Min testkod:

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 använder OUT eller IN OUT parametrar, Size egenskapen för OdbcParameter måste ställas in på ett adekvat värde.

Som svar på din kommentar angående undantagshantering skulle jag låta den som anropade dataåtkomstmetoden hantera undantag. Med using konstruktionen, Dispose metod kommer att anropas automatiskt på kommando- och anslutningsobjekten oavsett om det finns ett undantag eller inte.




  1. Sqoop on Dataproc kan inte exportera data till Avro-format

  2. Returnera kolumninformation från en länkad server i SQL Server (T-SQL-exempel)

  3. Extraherar värdet av xml-taggen i PostgreSQL

  4. Fråga flera tabeller - visa Team Name baserat på Team ID