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:
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.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);
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.