Oracle
 sql >> база данни >  >> RDS >> Oracle

Каква е правилната odbc команда за извикване на съхранена процедура на Oracle с параметри от .Net?

Работя с .NET 3.5 и Oracle 10gR2. Добавих изходен параметър в отговор на вашия коментар.

Server , Uid и Pwd са променени, за да защитят невинните. Задайте им подходящи стойности.

Моята съхранена процедура:

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

Моят тестов код:

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

Когато използвате OUT или IN OUT параметри, Size свойството на OdbcParameter трябва да се настрои на подходяща стойност.

В отговор на вашия коментар относно обработката на изключения, бих накарал извикващият метода за достъп до данни да обработва изключения. С using конструкция, Dispose методът ще бъде извикан автоматично на обектите за команда и връзка, независимо дали има изключение или не.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Намерете всички съвпадения във varchar2()

  2. Как да намотавам към CSV форматиран файл с помощта на SQLPLUS?

  3. HikariCP пропуска Oracle потребителски тип

  4. Сървърът на Oracle 12c не може да бъде достъпен от отдалечен компютър чрез .Net доставчика

  5. JOINs с условие в HQL заявка?