С# Oracle выполняет хранимую процедуру с выходным параметром

Ситуация:
Я пытаюсь запустить хранимую процедуру с выходным параметром, который мне нужно перехватить.
Я использую C# 3.5 и OracleClient с OleDbConnection.

Исследование:
Я искал другие способы, но, насколько я могу судить, я делаю это правильно. служба поддержки Microsoft и различные другие форумы.

Проблема:
Когда я выполняю команду cmd.ExecuteNonQuery(), она просто зависает. Никаких ошибок или чего-то еще, он просто останавливается и удерживает Thread.
Когда я пытаюсь через OleDbDataReader или Scalar, ничего лучше.
Если я изменю CommandText (удалю имя пакета), он выдаст ошибку, что не может найти хранимую процедуру, поэтому я знаю, что по крайней мере это правильно.

Код:
Оракул:

PROCEDURE deleteThemakaart
(an_seqthemakaart IN NUMBER, an_retval OUT NUMBER)
....

C#:

double InputValue = 777;
try
{
    OleDbConnection con = new OleDbConnection(...);
    con.Open();

    OleDbCommand cmd = new OleDbCommand()
    {
        CommandText = "thema.pckg_themakaarten.deleteThemakaart",
        Connection = con,
        CommandType = CommandType.StoredProcedure,
    };

    OleDbParameter input = cmd.Parameters.Add("an_seqthemakaart", OleDbType.Double);
    OleDbParameter output = cmd.Parameters.Add("an_retval", OleDbType.Double);

    input.Direction = ParameterDirection.Input;
    output.Direction = ParameterDirection.Output;

    input.Value = InputValue;

    cmd.ExecuteNonQuery();

    return (double)output.Value;
}
catch (Exception ex)
{
    ...
}
finally
{
    con.Close();
}

Любая помощь очень приветствуется :)

Редактировать: некоторый код находится ниже в комментарии, но до сих пор не получил меня дальше :(

Привет


person Rik De Peuter    schedule 27.06.2011    source источник
comment
Пробовали ли вы вызывать процедуру напрямую, то есть с помощью скрипта PL/SQL? Так просто, чтобы исключить возможность того, что сама процедура не вернется.   -  person Martin Klinke    schedule 27.06.2011
comment
Как насчет установки направления в самом Add?   -  person V4Vendetta    schedule 27.06.2011
comment
Если я вызываю хранимую процедуру в SqlNavigator, она работает отлично. И я не могу установить направление непосредственно в «Добавить», не так ли? Я мог бы добавить .Direction = ... но тогда он не вернет OleDbParameter.   -  person Rik De Peuter    schedule 27.06.2011
comment
Пробовали ли вы использовать другой тип параметров вместо OleDbType.Double? Думаю, идентификатор должен быть скорее целым числом (или BigInt).   -  person Martin Klinke    schedule 27.06.2011
comment
Я использовал Double, потому что когда я использовал схему XSD для получения данных, он преобразовывал их в Doubles. Но даже когда я пробовал с Decimal/Integer/BigInt, это тоже не сработало.   -  person Rik De Peuter    schedule 27.06.2011
comment
Странно то, что когда я просматриваю обозреватель серверов, я вижу хранимую процедуру, но когда я пытаюсь добавить ее в свою схему XSD, она говорит, что процедура не существует. Но я могу добавить некоторые другие в разные пакеты. Когда я затем проверяю код и обновляю свой CommandText с тем же синтаксисом, он выдает ошибку, что не может его найти. Например: CommandText = string.Format(\THEMA\.\PCKG_THEMAKAARTEN\.\{0}\, procedureName),   -  person Rik De Peuter    schedule 27.06.2011
comment
@FrieK: вы рассматривали возможность использования ODAC (компонент доступа к данным Oracle)? В прошлом у меня было множество проблем с использованием провайдера MS, особенно когда вы имеете дело с хранимыми процедурами (пакетами) и т. д. ODAC стабилен, очень хорошо работает с SP и быстрее -› oracle.com/technetwork/database/windows/downloads/   -  person LeftyX    schedule 27.06.2011


Ответы (1)


Я нашел нарушителя спокойствия... один из столов, которые использовала процедура, был заблокирован.

person Rik De Peuter    schedule 27.06.2011