Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Jaka jest właściwa komenda odbc do wywoływania procedury składowanej Oracle z parametrami z .Net?

Korzystam z platformy .NET 3.5 i Oracle 10gR2. Dodałem parametr wyjściowy w odpowiedzi na Twój komentarz.

Server , Uid i Pwd zostały zmienione, aby chronić niewinnych. Ustaw je na odpowiednie wartości.

Moja procedura składowana:

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 kod testowy:

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

Podczas korzystania z OUT lub IN OUT parametry, Size właściwość OdbcParameter musi być ustawiony na odpowiednią wartość.

W odpowiedzi na Twój komentarz dotyczący obsługi wyjątków, chciałbym, aby osoba wywołująca metodę dostępu do danych obsługiwała wyjątki. Z using konstrukcja, Dispose metoda zostanie wywołana automatycznie na obiektach poleceń i połączeń, niezależnie od tego, czy występuje wyjątek, czy nie.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Problem z rownum w zapytaniu Oracle

  2. Jak połączyć Androida z bazą danych Oracle?

  3. Nie można skompilować GI 12.1.0.2 i błędu segmentacji

  4. Kolumna niejednoznacznie zdefiniowana

  5. Skuteczniejszy sposób na znalezienie pracowników objętych zasięgiem między dwiema datami