sql >> Databáze >  >> RDS >> Oracle

Jaký je správný příkaz odbc pro volání uložené procedury Oracle s parametry z .Net?

Používám .NET 3.5 a Oracle 10gR2. V reakci na váš komentář jsem přidal výstupní parametr.

Server , Uid a Pwd byly změněny, aby chránily nevinné. Nastavte je na vhodné hodnoty.

Moje uložená procedura:

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

Můj testovací kód:

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

Při použití OUT nebo IN OUT parametry, Size vlastnost OdbcParameter musí být nastavena na adekvátní hodnotu.

V reakci na váš komentář týkající se zpracování výjimek bych nechal volajícího metody přístupu k datům zpracovat výjimky. Pomocí using konstrukt, Dispose metoda bude volána automaticky na objektech příkazů a připojení, ať už existuje výjimka nebo ne.




  1. Připojte celou tabulku jako jeden řádek

  2. Připojení k MySql pomocí Java - SSL připojení

  3. Výsledek SQLAlchemy pro sloupec UTF-8 je typu 'str', proč?

  4. Načtěte komentář k tabulce mysql pomocí DatabaseMetaData