Вызов функции пакета Oracle с использованием Odbc из C # - PullRequest
1 голос
/ 01 июня 2010

У меня есть функция, определенная внутри пакета Oracle:

CREATE OR REPLACE PACKAGE BODY TESTUSER.TESTPKG as
  FUNCTION testfunc(n IN NUMBER) RETURN NUMBER as
  begin
    return n + 1;
  end testfunc;
end testpkg;
/

Как я могу вызвать его из C #, используя Odbc? Я попробовал следующее:

using System;
using System.Data;
using System.Data.Odbc;

class Program {
    static void Main(string[] args) {
        using (OdbcConnection connection = new OdbcConnection("DSN=testdb;UID=testuser;PWD=testpwd")) {
            connection.Open();

            OdbcCommand command = new OdbcCommand("TESTUSER.TESTPKG.testfunc", connection);
            command.CommandType = System.Data.CommandType.StoredProcedure;

            command.Parameters.Add("ret", OdbcType.Int).Direction = ParameterDirection.ReturnValue;

            command.Parameters.Add("n", OdbcType.Int).Direction = ParameterDirection.Input;
            command.Parameters["n"].Value = 42;

            command.ExecuteNonQuery();
            Console.WriteLine(command.Parameters["ret"].Value);
        }
    }
}

Но я получаю исключение, говорящее "Неверный оператор SQL".
Что я делаю не так?

Ответы [ 4 ]

3 голосов
/ 01 июня 2010

В прошлом я использовал для командной строки что-то вроде следующего:

"{? = CALL JF_TESTUSER.TESTPKG.testFunc (?)}"

См. Следующее статья для получения дополнительной информации

2 голосов
/ 01 июня 2010

попробуй

OdbcCommand command = new OdbcCommand("begin ? := TESTUSER.TESTPKG.testfunc(?) end;", connection);
1 голос
/ 01 июня 2010

Мне удалось вызвать функцию пакета следующим образом:

command.CommandText = @"begin
    :ret := ILMTEST.testpkg.testfunc(:n);
end;";
command.CommandType = System.Data.CommandType.Text;
0 голосов
/ 01 июня 2010

Я думаю, вы должны рассмотреть вместо этого Oracle Client.

И если вы выберете ODBC для создания DSN, а затем подключитесь к нему, чтобы сделать его независимым от базы данных, рассмотрите возможность использования Enterprise Library Data Access Application Block.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...