var totalNumRowsParam = new OracleParameter("total_num_rows", OracleType.Int32) { Direction = ParameterDirection.Output }; var resultsParam = new OracleParameter("results", OracleType.Cursor) { Direction = ParameterDirection.Output }; var temp = new List(); using (var conn = new OracleConnection(connectionString)) { conn.Open(); using (var command = conn.CreateCommand()) { command.CommandType = CommandType.StoredProcedure; command.CommandText = "blah_search"; command.Parameters.Add(new OracleParameter("start_index", (object)0)); command.Parameters.Add(new OracleParameter("num_rows", (object)100000)); command.Parameters.Add(totalNumRowsParam); command.Parameters.Add(resultsParam); command.Parameters.Add(new OracleParameter("results1", OracleType.Cursor) { Direction = ParameterDirection.Output }); OracleString s; command.ExecuteOracleNonQuery(out s); using(var reader = (OracleDataReader)resultsParam.Value) { while (reader.Read()) { var item = new Blah(); temp.Add(item); item.Name = (string)reader["name"]; // ... } } } }