Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#Oracle使用输出参数执行存储过程_C#_Oracle_Parameters_Procedure - Fatal编程技术网

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

C#Oracle使用输出参数执行存储过程,c#,oracle,parameters,procedure,C#,Oracle,Parameters,Procedure,情况: 我正在尝试运行一个具有输出参数的存储过程,我需要捕获该参数。 我使用C#3.5和带有OLEDB连接的OracleClient 研究: 我一直在寻找其他方法,但据我所知,我的做法是正确的。以及其他各种论坛 问题: 当我执行cmd.ExecuteNonQuery()时,它就卡住了。没有错误或任何东西,它只是停在那里并保持线程。 当我尝试通过OleDbDataReader或标量时,没有什么比这更好的了。 如果我更改CommandText(删除包名),它会给出一个错误,即找不到存储过程,因此我知

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

研究:
我一直在寻找其他方法,但据我所知,我的做法是正确的。以及其他各种论坛

问题:
当我执行cmd.ExecuteNonQuery()时,它就卡住了。没有错误或任何东西,它只是停在那里并保持线程。
当我尝试通过OleDbDataReader或标量时,没有什么比这更好的了。
如果我更改CommandText(删除包名),它会给出一个错误,即找不到存储过程,因此我知道这至少是正确的

代码:
甲骨文:

C#:

欢迎任何帮助:)

编辑:下面的注释中有一些代码,但到目前为止我还没有进一步了解:(


问候

我找到了麻烦制造者…所用过程的一个表被锁定。

您是否尝试过直接调用该过程,即使用PL/SQL脚本?因此只是为了排除过程本身不返回的可能性。在
添加
本身中设置方向如何?如果我在SqlNavigator它工作得很好。我不能直接在Add中设置方向,可以吗?我可以添加。方向=…但是它不会返回OLEDBPParameter。您是否尝试使用其他类型的参数而不是OleDbType.Double?标识符应该是整数(或BigInt)我猜。我使用Double是因为当我使用XSD方案获取数据时,它将其转换为Double。但即使我尝试使用Decimal/Integer/BigInt,它也不起作用。
PROCEDURE deleteThemakaart
(an_seqthemakaart IN NUMBER, an_retval OUT NUMBER)
....
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();
}