Ver Mensaje Individual
  #1 (permalink)  
Antiguo 27/07/2007, 03:13
chcma
 
Fecha de Ingreso: junio-2003
Ubicación: Asturias
Mensajes: 2.429
Antigüedad: 20 años, 11 meses
Puntos: 7
PostgreSQL 8.2, Npgsql para 2.0, C# 2.0

Buenos dias foreros !!!

Veran tengo un problema con un SP del tipo plpgsql. La cuestion es que dicho SP me devuelve un refcursor con los datos de una select:
Código:
CREATE OR REPLACE FUNCTION pdameusuarios2(refcursor) RETURNS refcursor AS
$BODY$
BEGIN
	OPEN $1 FOR SELECT * FROM tusuarios;
	RETURN $1;
END;
$BODY$
  LANGUAGE 'plpgsql' VOLATILE;
ALTER FUNCTION pdameusuarios2(refcursor) OWNER TO "admin";


--PARA PROBAR QUE FUNCIONA
select pdameusuarios2('micursor');
FETCH ALL in micursor;

Pues bien el SP funciona perfectamente, sin embargo... soy incapaz de llenar mi DataTable con los datos. Pense que era como con el OracleClient, que si pasas el cursor como un parametro InOutPut ya sabría rellenarme solo el DataTable, pero no es asi. Actualmente tengo el siguiente codigo para .NET
Código:
            Npgsql.NpgsqlConnection miCn = new Npgsql.NpgsqlConnection(".....");
            DataTable tbDatos = new DataTable();

            Npgsql.NpgsqlCommand objComando = new Npgsql.NpgsqlCommand("pdameusuarios2('micursor')", miCn);
            objComando.CommandType = CommandType.StoredProcedure;

            Npgsql.NpgsqlParameter objParametro = new Npgsql.NpgsqlParameter("micursor", NpgsqlTypes.NpgsqlDbType.Refcursor);
            objParametro.Direction = ParameterDirection.Output;
            objComando.Parameters.Add(objParametro);

            Npgsql.NpgsqlDataAdapter objDa = new Npgsql.NpgsqlDataAdapter(objComando);
            objDa.Fill(tbDatos);
Esta llamada me esta rellenando en tbDatos un DataRow con el valor "micursor". Si dejo el NpgSqlCommand como ("pdameusuarios2()") entonces me da un error de que dicho procedimiento no existe.

Por favor, si alguien sabe como puedo rellenar mi DataTable con un SP de plpgsql que devuelve mas de un registro en un RefCursor, le agradeceria que me hechase un cable.



NOTA: He mirado en la doc de Npgsql.
__________________
Charlie.