Software y Aplicaciones Web

Blog de desarrollo de software y aplicaciones web

Comentarios Recientes

Comment RSS

MSDN Home Page (Argentina)


C# Corner


AspAlliance.com

Declaración

Las opiniones en este blog se proporcionan "TAL CUAL", sin garantías,  no confieren derechos y no reflejan, necesariamente, la opinión de quienes me contratan.
Algunas cuestiones que se comentan en el blog no son reales, cualquier similitud con alguna persona viva o muerta no es más que una coincidencia, tampoco significa que necesite terapia, soy asi.

© Copyright 2007-2010

Propaganda

Este sitio implementa publicidad basada en intereses
Oct
13.
2009

  XML y ADO.NET - parte 1

En esta publicación vamos a ver un poquito de la relación que XML tiene con ADO.NET.

XML - Extensible Markup Language, es un estándar cuya historia se remonta a los años setenta, que surge como la necesidad de compartir información en un formato que sea fácil de entender y procesar y particularmente que no dependa de la aplicación o plataforma en la que se procesan los datos. Su nombre lo dice claramente, se trata de un lenguaje de marcas extensible; es un lenguaje porque nos permite comunicarnos, utiliza marcas para indicar los datos que conforman la información que comunicamos y es extensible porque podemos extender el lenguaje a todas nuestras necesidades.

Los componentes léxicos, la sintaxis y semántica de este lenguaje es muy sencilla puden hallar infinidad de información en la red; sugiero que arranquen por el estándar.

Actualmente XML es utilizado absolutamente en todos lados, por supuesto permite el trabajo entre aplicaciones desarrolladas en diferentes plataformas, hasta se puede leer un documento XML con un simple editor de texto; de modo que es indiscutible las ventajas que el lenguaje facilita a los desarrolladores y consecuentemente a las organizaciones.

El Microsoft Framework facilita varias alternativas para trabajar con documentos XML, una de ellas es la posibilidad que los DataSet (representación en memoria de un conjunto de tablas de la base de datos) manipulen información en formato XML.

El siguiente ejercicio nos permite ver como se puede generar información en formato XML, y en el mismo ejercicio veremos cómo podemos utilizar un origen de datos en formato XML.

 

Vamos a considerar una tabla de datos, en este caso la tabla Provincias (ver publicaciones de Un Poco de ADO.NET) de la cuál vamos a generar un documento XML que luego utilizaremos como origen de datos en otro componente de interfaz de usuario.

Para el ejercicio vamos a necesitar un formulario web en el que vamos a incorporar un GridView cuyo origen de datos vamos a generar desde el programa accediendo a la base de datos, un TextBox para mostrar la misma información pero en formato XML y otro GridView cuyo origen de datos será un documento XML. Por supuesto que para todo esto harán falta algunos botones de modo que se pueda controlar o guiar la ejecución. El diseño del formulario web puede ser algo como:

El código que corresponde a este diseño es el siguiente:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm5.aspx.cs" Inherits="ADO2.WebForm5" ValidateRequest="false" %>
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
      <div style="float:left; width:25%; padding-right:10px;">
        <asp:GridView ID="gvProvincias" runat="server" AutoGenerateColumns="False" 
          DataKeyNames="ID"  
          EmptyDataText="There are no data records to display.">
          <Columns>
            <asp:BoundField DataField="ID" HeaderText="ID" ReadOnly="True" 
              SortExpression="ID" />
            <asp:BoundField DataField="Nombre" HeaderText="Nombre" 
              SortExpression="Nombre" />
          </Columns>
        </asp:GridView>
      </div>
      <div>
        <div style="float:left; padding-right:10px">
          <asp:TextBox ID="txtXML" runat="server" Width="40%" Height="300px" TextMode="MultiLine" ></asp:TextBox>
        </div>
        <div>
          <asp:GridView ID="gvXML" runat="server" AutoGenerateColumns="False" 
            DataKeyNames="ID"  
            EmptyDataText="There are no data records to display.">
            <Columns>
              <asp:BoundField DataField="ID" HeaderText="ID" ReadOnly="True" 
                SortExpression="ID" />
              <asp:BoundField DataField="Nombre" HeaderText="Nombre" 
                SortExpression="Nombre" />
            </Columns>
          </asp:GridView>
        </div>
      </div>
 
      <div style="clear:both;">
        <br />
        <asp:Button ID="btnGenerateXML" runat="server" Text="Generar XML" 
          onclick="btnGenerateXML_Click" />
        &nbsp;&nbsp;&nbsp;&nbsp;
        <asp:Button ID="btnSaveXML" runat="server" Text="Grabar XML (Provincia.xml)" 
          onclick="btnSaveXML_Click" />
        &nbsp;&nbsp;&nbsp;&nbsp;
        <asp:Button ID="btnLoadXML" runat="server" Text="Cargar desde XML (Provincia.xml)" 
          onclick="btnLoadXML_Click" />
      </div>
    </div>
    </form>
</body>
</html>

Veamos, que hay en el código asociado de este formulario web. Los métodos que atrapan y controlan los eventos del formulario son los siguientes:

    #region Eventos del formulario
    protected void Page_Load(object sender, EventArgs e)
    {
      if (!this.IsPostBack)
      {
        MyDataBind();
      }
    }
 
    protected void btnGenerateXML_Click(object sender, EventArgs e)
    {
      GenerateXML();
    }
    protected void btnSaveXML_Click(object sender, EventArgs e)
    {
      SaveXML();
    }
    protected void btnLoadXML_Click(object sender, EventArgs e)
    {
      LoadXML();
    }
    #endregion

La porción de programa que enlaza los datos con la interfaz de usuario es la siguiente:

    /// <summary>
    /// Enlaza los datos con los controles de la interfaz de usuario
    /// </summary>
    protected void MyDataBind()
    {
      gvProvincias.DataSource = MyDataLoad();
      gvProvincias.DataBind();
    }
    /// <summary>
    /// Carga los datos de la base de datos en un DataSet
    /// </summary>
    /// <returns>DataSet</returns>
    protected DataSet MyDataLoad()
    {
      SqlConnection mySqlConnection = new SqlConnection(ConfigurationManager.ConnectionStrings["Postal"].ConnectionString);
      SqlCommand mySqlCommand = new SqlCommand();
      mySqlCommand.Connection = mySqlConnection;
      DataSet myDataSet = new DataSet();
      SqlDataAdapter mySqlDataAdapter;
 
      mySqlCommand.CommandText = "SELECT [ID], [Nombre] FROM [Provincia]";
      mySqlCommand.CommandType = CommandType.Text;
      mySqlDataAdapter = new SqlDataAdapter(mySqlCommand);
      mySqlDataAdapter.Fill(myDataSet, "Provincia");
 
      return myDataSet;
    }

Observen que simplemente se obtiene los datos de la tabla Provincia y se entregan en un DataSet que se enlaza como origen de datos del GridView.

 

El primer botón obtiene en formato XML la información del DataSet y la muestra en el TextBox del centro. El código que hace eso es realmente simple, se vuelve a generar un DataSet con la información de la base de datos y se le pide al objeto DataSet que nos entregue la misma en formato XML.

    /// <summary>
    /// Genera una cadena (string) con el contenido del DataSet
    /// el formato de la cadena es XML
    /// </summary>
    protected void GenerateXML()
    {
      DataSet myDataSet = MyDataLoad();
      String temp = myDataSet.GetXml();
      txtXML.Text = temp;
    }

 

El segundo botón genera archivos o documentos en formato XML con la información contenida en el DataSet.

    /// <summary>
    /// Graba el contenido del DataSet en un archivo
    /// el formato del archivo es XML con XSD
    /// </summary>
    protected void SaveXML()
    {
      DataSet myDataSet = MyDataLoad();
      String fileName = Server.MapPath("~/Provincia.xml");
      myDataSet.WriteXml(fileName, XmlWriteMode.WriteSchema);
      // Es posible grabar solamente la definición del esquema
      fileName = Server.MapPath("~/Provincia.xsd");
      myDataSet.WriteXmlSchema(fileName);
    }

En este caso el código está generando dos archivos, el primero (Provincia.xml) contiene la información del DataSet (también incluye el esquema, podría no hacerlo) y el segundo (Provincia.xsd) solamente contiene el esquema. Esto suele ser útil cuando se desea tener un documento con el esquema para la futura generación de documentos XML.

 

Finalmente, el último botón carga el otro GridView desde el archivo o documento en formato XML.

    /// <summary>
    /// Carga un DataSet desde un archivo en formato XML
    /// el formato ademas puede incluir la definicion del esquema
    /// </summary>
    protected void LoadXML()
    {
      DataSet myDataSet = new DataSet();
      String fileName = Server.MapPath("~/Provincia.xml");
      if (System.IO.File.Exists(fileName))
      {
        myDataSet.ReadXml(fileName, XmlReadMode.ReadSchema);
      }
      // Enlaza el DataSet con un componente de interfaz de usuario
      gvXML.DataSource = myDataSet;
      gvXML.DataBind();
    }

Observen que el origen de datos de un DataSet puede ser una consulta realizada contra un motor de base de datos o bien un documento en formato XML.

Para leer fuera de línea:XML y ADO NET - parte 1.pdf (99,61 kb)

 




Categorías: ASP.NET | Programacion | WebSite | XML



Add comment




  Country flag
biuquote
  • Comment
  • Preview
Loading