C# 调用oracle过程时,C OleDb OUT参数失败

C# 调用oracle过程时,C OleDb OUT参数失败,c#,oracle,visual-studio-2013,plsql,C#,Oracle,Visual Studio 2013,Plsql,我正在调用一个具有游标类型的OUT参数的过程。似乎我遗漏了一些东西,因为我得到了错误:错误的参数数量或类型。。。。我的代码如下: public static DataTable SearchClient() { try { using (OleDbCommand cmd = new OleDbCommand(packetName + ".select_A1001310")) {

我正在调用一个具有游标类型的OUT参数的过程。似乎我遗漏了一些东西,因为我得到了错误:错误的参数数量或类型。。。。我的代码如下:

 public static DataTable SearchClient()
    {
        try
        {
            using (OleDbCommand cmd = new OleDbCommand(packetName + ".select_A1001310"))
            {
                cmd.CommandType = CommandType.StoredProcedure;                                        
                cmd.Parameters.Add("io_cursor", OracleType.Cursor).Direction = ParameterDirection.Output;


                SqlManager sqlManager = new SqlManager();
                return sqlManager.GetDataTable(cmd);
            }
        }
        catch (Exception ex)
        {
            ex.ToString();
            System.Console.WriteLine(ex);
            //TODO; Handle exception
        }
        return null;
    }
程序:

TYPE lcursor_data IS REF CURSOR;        
PROCEDURE select_A1001310(io_cursor OUT lcursor_data)
      AS
      BEGIN
        OPEN io_cursor FOR
        --
          SELECT client_id
            FROM a1001310
           WHERE status = 'A';
        --
      EXCEPTION
        WHEN OTHERS THEN
          IF io_cursor%ISOPEN THEN
            CLOSE io_cursor;
          END IF;
        --REVIRE: EXCEPTION HANDLER
      END select_A1001310;
有什么想法吗? 更新: 如果我更改代码,使用OracleClient而不是OleDb,它就会工作。有没有办法使用oleDb而不是OracleClient包含游标类型参数?OracleClient代码方法如下

public static DataTable SearchClient()
{
    string connection = ConfigurationManager.ConnectionStrings["DBConnection_Oracle"].ToString();
    string procedure = packetName + ".p_search_client";

    OracleParameter[] parameters = new OracleParameter[1];
    parameters[0] = new OracleParameter("io_cursor", OracleType.Cursor, 4000, ParameterDirection.Output, true, 0, 0, "", DataRowVersion.Current, String.Empty);

    DataTable dt = new DataTable();
    dt = DataManager_Oracle.GetDataTable_(connection, procedure, parameters);
    return dt;
}

如果存储过程返回行集,则必须在web.config中将PLSQLRSet设置为TRUE

<connectionStrings> 
        <add name="DBConnection" connectionString="Provider=MSDAORA.1;Data Source=DB;User Id=user;Password=pass;enlist=false;PLSQLRSet=true;OLE DB Services = -4" providerName="Oracle.DataAccess"/> 
</connectionStrings>

你能添加你的连接字符串吗?谢谢你好连接字符串如下所示。我已经更新了我的答案。我按照建议包含了提到的属性,但仍然存在相同的问题。现在,如果我通过使用OracleClient而不是OleDb来改变我的整个方法,它会起作用。有没有办法使用oleDb而不是OracleClient包含游标类型参数?我将把提到的方法OracleClient显示为一个更新…你完全正确@Nagaraj Ravendran;经过一些故障排除,您添加属性PLSQLRset的方法对我有效。谢谢你的朋友!顺便说一句,为了工作,我必须删除代码cmd.Parameters.Addio_cursor中的OUT参数声明,。。。