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();
}