Oracle.DataAccess.dll中出现“Oracle.DataAccess.Client.OracleException”类型的异常,但未在用户代码中处理

时间:2018-01-01 17:53:29

标签: c# asp.net-mvc oracle oracle11g

有谁能告诉我这里我做错了什么?我正面临 Oracle.DataAccess.Client.OracleException例外,当我点击查看我看到的详细信息时

  

ORA-06550:第1行第7列:PLS-00306:错误的数字或类型   调用'PRC_ABCD_GETALL'ORA-06550时的参数:第1行第7列:   PL / SQL:忽略语句

我有这样的商店程序

PROCEDURE PRC_ABCD_GETALL (resultset_out OUT TYPES.cursorType)
AS
BEGIN
OPEN 
resultset_out FOR SELECT * FROM ABCD;
END PRC_ABCD_GETALL;

我的C#代码就像这样

using (OracleConnection conn = new OracleConnection(cnn))
{
    conn.Open();
    OracleCommand cmd = new OracleCommand();
    cmd.Connection = conn;
    cmd.CommandText = "PRC_ABCD_GETALL";
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.Parameters.Add("resultset_out", OracleDbType.RefCursor, 
    ParameterDirection.Output);
    OracleDataReader rdr = cmd.ExecuteReader();              
    while (rdr.Read())
    {
        result.Add(Construct(rdr));
    }
}

1 个答案:

答案 0 :(得分:0)

您必须在过程的声明中使用sys_refcursor而不是TYPES.cursorType。 Types.cursorType不是一样的。

您可以尝试更改c#调用数据类型,而不是在存储过程中更改它:

using (OracleConnection conn = new OracleConnection(cnn)){
conn.Open();
OracleCommand cmd = new OracleCommand();
cmd.Connection = conn;
cmd.CommandText = "PRC_ABCD_GETALL";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("resultset_out", OracleType.Cursor, 
ParameterDirection.Output);
OracleDataReader rdr = cmd.ExecuteReader();              
while (rdr.Read())
{
    result.Add(Construct(rdr));
}}