Re: npgsql
Ricardo Javier Aranibar León <[email protected]> Wed, 29 Jun 2011 11:45:20 -0400
| Newsgroups | gmane.comp.gnome.mono.hispano |
|---|---|
| Message-ID | <[email protected]> |
Muchas gracias Juan por la respuesta.
Efectivamente en otros proyectos separo el codigo en la capa de
presentación, negocios, servicios y datos.
El código que puse es de ejemplo.
Como le comentaba estoy trabajando con npgsql y lo que necesito es que me
devuelva la consulta en un xml esto lo realice con postgresql select
query_to_xml en npgsql no encontré un comando parecido al q se utiliza con
SqlServer y Oracle el ExecuteXmlReader por eso arme un pequeno ejemplo.
En el ejemplo que me mando tendría que ir verificando cada tipo de dato al
retornar en una lista no?
list.Add (new TipoObjecto { Propiedad1 = reader.GetString (0), Propiedad2 =
reader.GetInt32 (1) });
por ejemplo cuando trabajo con oracle como lo podria traducir para usarlo
con npgsql????
gracias
/// <summary>
/// Lee un objeto a partir de su ID
/// </summary>
/// <typeparam name="T">Tipo de la colexión de Objetos</typeparam>
/// <param name="iD">ID del objeto</param>
/// <param name="TableName">Nombre de la Tabla</param>
/// <param name="singleType">Tipo de Objeto</param>
/// <returns>Colexión de Objetos leidos</returns>
public T Read<T>(Int64 iD, string TableName, Type singleType)
{
System.Reflection.PropertyInfo[] propiedades;
String sqlText;
XmlReader xmlReader;
OracleCommand cmd = Connection.CreateCommand();
XmlSerializer serializer = new XmlSerializer(typeof(T));
try
{
propiedades = singleType.GetProperties();
sqlText = "SELECT ";
foreach (System.Reflection.PropertyInfo propiedad in propiedades)
{
if (propiedad.PropertyType.Namespace !=
"System.Collections.Generic")
{
sqlText = sqlText + propiedad.Name.ToUpper() + ",";
}
}
sqlText = sqlText.Substring(0, sqlText.Length - 1);
sqlText = sqlText + " FROM " + TableName + " WHERE ID = " +
Convert.ToString(iD);
cmd.CommandText = sqlText;
cmd.XmlCommandType = OracleXmlCommandType.Query;
cmd.XmlQueryProperties.RootTag = typeof(T).Name;
cmd.XmlQueryProperties.RowTag = singleType.Name;
cmd.BindByName = true;
xmlReader = cmd.ExecuteXmlReader();
return (T)serializer.Deserialize(xmlReader);
}
catch (OracleException ex)
{
if (ex.Number == 6550) mensaje = "No tiene privilegios para
seleccionar esta Tabla";
else mensaje = ex.Message; ;
return (T)typeof(T).GetConstructor((new Type[] { })).Invoke(new
object[] { });
}
finally
{
cmd.Dispose();
}
}
2011/6/29 Juan C. Olivares <[email protected]>
> Estimado Ricardo:
>
> En primer lugar, sugiero separar la lógica de acceso a datos de la de
> presentación (XML).
>
> Tal vez, deberías retornar objetos y luego usar un serializador para
> entregar XML al final del proceso.
>
> En el caso de este método, puedes usar dblinq para obtener objetos
> directamente o mapearlos. Por ejemplo, si haces el mapeo desde el data
> reader, sería algo así:
>
> var list = new List <TipoObjeto> ();
> using (var connection = new NpgsqlConnection (...))
> using (var command = new NpgsqlCommand (...., connection))
> using (var reader = command.ExecuteReader ())
> while (reader.Read ())
> list.Add (new TipoObjecto { Propiedad1 = reader.GetString (0),
> Propiedad2 = reader.GetInt32 (1) });
> return list;
>
> 2011/6/29 Ricardo Javier Aranibar León <[email protected]>
>
>> Hola Lista
>>
>> Mis consultas son 2:
>> 1.- Como puedo realizar un WCF o webservice con npgsql y mono, que me
>> retorne los datos en xml o json.
>>
>> 2.- Mi consulta a la base de datos antes la asía que me retorne un dataset
>> ya no quiero mas bien quiero que me retorne un xml y este resultado cargarlo
>> a una lista.
>> estoy probando y tengo este código, funciona me carga el xml dentro el
>> xmldocument me parece q no esta bien por el while, tienen alguna forma mejor
>> de hacerlo???
>> en vez que me retorne a un xmldocument como podría hacer para q me retorne
>> a una List por ejemplo a List <Traspasos> a la espera de su colaboracion
>> saludos Ricardo
>>
>> public System.Xml.XmlDocument RetornarDatosXml() {
>> System.Xml.XmlDocument xd = new System.Xml.XmlDocument();
>> try {
>> if (this.AbrirConexion()) {
>> this.mPgComando = new NpgsqlCommand("select
>> query_to_xml('select * from traspasos',true,false,'')", this.mPgCon);
>> Npgsql.NpgsqlDataReader dr =
>> mPgComando.ExecuteReader();
>> string p = "";
>> while (dr.Read()) {
>> for (int i = 0; i < dr.FieldCount; i++) {
>> p = p + dr[i].ToString();
>> }
>> }
>> xd.LoadXml(p);
>> return xd;
>> }
>> else
>> {
>> throw new Exception("No existe conexion a la Base de
>> Datos.");
>> }
>> }
>> catch (Exception ex)
>> {
>> throw new Exception(ex.Message);
>> }
>> finally
>> {
>> this.CerrarConexion();
>> }
>>
>> }
>> _______________________________________________
>> Mono-hispano mailing list
>> [email protected]
>> https://listas.hispalinux.es/mailman/listinfo/mono-hispano
>>
>
>
>
> --
> Atte,
> Juan Cristóbal Olivares
>
> *La disposición a admirar, casi a adorar, a los ricos y poderosos y a ....
> descuidar a las personas más pobres … es la mayor y más universal causa de
> corrupción de nuestros sentimientos morales (**Adam Smith)*
>
>
_______________________________________________
Mono-hispano mailing list
[email protected]
https://listas.hispalinux.es/mailman/listinfo/mono-hispano