c# – ORA-06550:第1行第7列:PLS-00306:参数的数量或类型错误

嗨,我在Oracle 11g服务器上调用存储过程有问题.

这是我的存储过程

PROCEDURE get_rit_by_user_id(KDC_KEY      IN VARCHAR2,p_id_utente IN NUMBER,p_cur_out   OUT type_cursor) IS
  BEGIN
    ...
    ...
    ...
  END

这是我的c#代码

OracleCommand cmd = new OracleCommand();
cmd.Connection = oracleConnection;
cmd.CommandText = userIdEsercizio + packageName + "GET_RIT_BY_USER_ID";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("KDC_KEY",OracleDbType.Varchar2,kdcKey,ParameterDirection.Input);
cmd.Parameters.Add("P_ID_UTENTE",OracleDbType.Int32,user_id,ParameterDirection.Input);
cmd.Parameters.Add("P_CUR_OUT",OracleDbType.RefCursor,ParameterDirection.Output);

OracleDataReader reader = cmd.ExecuteReader();

cmd.ExecuteReader()抛出此异常

ORA-06550: line 1,column 7:
PLS-00306: wrong number or types of arguments in call to 'GET_RIT_BY_USER_ID'
ORA-06550: line 1,column 7:
PL/sql: Statement ignored

我在c#代码中看不出任何错误.你会帮我吗?谢谢

最好的祝福

解决方法

您的第二个参数是NUMBER,而不是整数.将第二个参数类型更改为OracleDbType.Decimal

http://docs.oracle.com/cd/B19306_01/win.102/b14307/OracleDbTypeEnumerationType.htm

另请检查Add方法的语法.现在可能更好地更明确地指定参数属性,即使它使代码更加冗长:

cmd.Parameters.Add(
    new OracleParameter() 
        {
            ParameterName="KDC_KEY",DbType=OracleDbType.Varchar2,Value=kdcKey,Direction=ParameterDirection.Input
        } 
    );

等等

proc除了光标还返回结果集吗?如果不使用ExecuteNonQuery而不是Execute

相关文章

C#项目进行IIS部署过程中报错及其一般解决方案_c#iis执行语句...
微信扫码登录PC端网站应用的案例(C#)_c# 微信扫码登录
原文地址:http://msdn.microsoft.com/en-us/magazine/cc163...
前言 随着近些年微服务的流行,有越来越多的开发者和团队所采...
最近因为比较忙,好久没有写博客了,这篇主要给大家分享一下...
在多核CPU在今天和不久的将来,计算机将拥有更多的内核,Mic...