C#Oracle使用输出参数执行存储过程

时间:2011-06-27 09:52:49

标签: c# oracle parameters procedure

情况: 我正在尝试运行一个具有输出参数的存储过程,我需要捕获它。
我使用C#3.5和带有OleDbConnection的OracleClient。

研究: 我一直在寻找其他方法,但据我所知,我做得对。 Microsoft support和其他各种论坛。

问题:
当我执行cmd.ExecuteNonQuery()时,它就会卡住。没有错误或任何东西,它只是停在那里并持有线程。
当我尝试使用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();
}

非常欢迎任何帮助:)

编辑:评论中有一些代码,但到目前为止还没有让我更进一步:(

问候

1 个答案:

答案 0 :(得分:2)

我找到了麻烦制造者......程序使用的其中一个表被锁定了。