从C#中的存储过程输出中检索VARCHAR2(4000)的TABLE

时间:2017-11-29 08:11:53

标签: c#

在C#中检索varchar2(4000)的Oracle表作为输出参数时,我需要你的帮助。

我有这个存储过程:

Type TTABSelectResult IS TABLE OF VARCHAR2(4000) INDEX BY BINARY_INTEGER;    
PROCEDURE FOO_Procedure(i_nIndex          IN NUMBER,
                        i_nAnzahl         IN NUMBER,
                        o_tabSelectResult OUT TTABSelectResult);

这就是我试过的代码:

using (var cmd = new OracleCommand
                {
                    Connection = Conn,
                    CommandType = CommandType.StoredProcedure,
                    CommandText = "FOO_Package.FOO_Procedure",
                    BindByName = true
                })
{
    cmd.Parameters.Add(new OracleParameter("i_Index", index));
    cmd.Parameters.Add(new OracleParameter("i_Cnt", maxCnt));
    cmd.Parameters.Add("o_tabSelectResult", ???).Direction = ParameterDirection.Output;

    cmd.ExecuteNonQuery();

    var obj = (???)cmd.Parameters["o_tabSelectResult"].Value;
}

请您告诉我哪些类型需要使用?因为OracleDbType不支持string[]

PS:我编辑了更多信息。

PPS:寻找从o_tabSelectResult表中获取数据的可能性。

2 个答案:

答案 0 :(得分:1)

试试这样:

    using (var cmd = new OracleCommand
                {
                    Connection = Conn,
                    CommandType = CommandType.StoredProcedure,
                    CommandText = "SELECT YOUR_FIELD FROM YOUR TABLE WHERE YOUR FILTER_COLUMN = @PARAM1",
                    BindByName = true
                })
     {
        cmd.Parameters.AddWithValue("@PARAM1", your_filter_param);
        var result = cmd.ExecuteScalar().ToString();
     }

答案 1 :(得分:0)

我将输出更改为引用光标,可用于在c#中填充List。

像魅力一样。

感谢大家的投入!