|
Las páginasASPX
Decir que todo lo que hicimos no requiere código es inapropiado. Nosotros no hemos escrito ningún código Microsoft® Visual Basic® .NET ó C#, pero la información acerca de los datos mostrados y la interación con el usuario es almacenada en el archivo ASPX. Si examinamos el código de esta página ASPX, encontraremos la declaración del primer control SqlDataSource, de manera similar a la siguiente:
< asp:sqldatasource
id="SqlDataSource1"
runat="server"
selectcommand="select customerid, companyname from customers"
providername="System.Data.OleDb"
connectionstring="Provider=SQLOLEDB.1;Integrated Security=SSPI;
Persist Security Info=False;Initial Catalog=Northwind;
Data Source=localhost;Use Procedure for Prepare=1;
Auto Translate=True;Packet Size=4096;Workstation ID=SERVER1;
Use Encryption for Data=False;
Tag with column collation when possible=False" >
< /asp:sqldatasource >
|
Como podrás observar, la información que ingresamos en los diferentes pasos del asistente es colocada en esta porción de código. El control SqlDataSource contiene atributos para la cadena de conexión y para la sentencia de selección que usamos para obtener la información. Si examinamos con detenimiento notarás que System.Data.OleDb es usado para comunicarnos con SQL Server. Pero está de más indicar que en próximas versiones será usado System.Data.SqlClient.
El código generado para el control DropDownList es:
< asp:dropdownlist
id="DropDownList1"
runat="server"
datavaluefield="customerid"
datasourceid="SqlDataSource1"
datatextfield="companyname"
autopostback="True">
< /asp:dropdownlist>
|
Esta porción de código contiene información que especifica la fuente de datos a usar, así como las columnas de la fuente de datos que constituyen el valor y el texto mostrado en el control DropDownList. Cuando un cliente es seleccionado en este control DropDownList, cierta información necesita ser pasada al siguiente control SqlDataSource donde será usada como un parámetro en la consulta.
< asp:sqldatasource
id="SqlDataSource2"
runat="server"
selectcommand="select * from orders where customerid=?"
providername="System.Data.OleDb"
connectionstring="Provider=SQLOLEDB.1;Integrated Security=SSPI;
Persist Security Info=False;Initial Catalog=Northwind;
Data Source=localhost;Use Procedure for Prepare=1;Auto Translate=True;Packet
Size=4096;Workstation ID=SERVER1;
Use Encryption for Data=False;
Tag with column collation when possible=False">
< selectparameters>
< asp:controlparameter
name="?"
propertyname="SelectedValue"
controlid="DropDownList1">
< /asp:controlparameter>
< /selectparameters>
< /asp:sqldatasource>
|
Este código es similar al del primer control SqlDataSource, no obstante, notarás que contiene una sección llamada selectparameters. Esta sección especifica que el valor del parámetro es obtenido de la propiedad SelectedValue del control DropDownList1. De esta manera, estos controles se enlazan declarativamente.
Finalmente el control GridView se enlaza con el segundo control SqlDataSource:
< asp:gridview
id="GridView1"
runat="server"
datasourceid="SqlDataSource2"
autogeneratecolumns="False">
|
Este modelo asegura que la mayoría de escenarios puedan ser manejados declarativamente dentro de una página ASPX.
Otras Fuentes de Datos
Hay una variedad de controles DataSource además del control SqlDataSource. Ellos son: AccessDataSource, ObjectDataSource, DataSetDataSource, XmlDataSource, y SiteMapDataSource.
AccessDataSource
Es evidente que Access es visto como una base de datos viable para Sitios Web ASP.NET. Realmente hay un número sorprendente de Sitios Web que usan Access como su Base de Datos y manejan decenas de miles de peticiones por día. Si pensamos acerca de esto, nos daremos cuenta que Access es apropiado para escenarios donde hay bajo volumen de información. Access fue creado para realizar un fácil despliegue, es decir, no hay servidores de base de datos que instalar, no hay scripts que ejecutar, etc. La seguridad es otro punto a tener en mente, mientras que Access no ofrece el control granular de SQL Server, frecuentemente esto no es necesario en pequeños escenarios, pero si en grandes escenarios donde muchos sitios a la vez se encuentran accediendo a la misma Base de Datos. Es necesario tener en cuenta, que algún nivel de seguridad puede ser provisto colocando los permisos de lectura/escritura al archivo.
ObjectDataSource
Hasta aquí, hemos visto como un Sitio Web puede ser construido declarativamente. No obstante, estos sitios son considerados Sitios Web en 2 capas, donde la capa de presentación se comunica directamente con la Base de Datos. En muchos escenarios, los Sitios Web son construidos en base a más capas lo que provee una mejor abstracción y encapsulación. Podríamos pensar que si necesitamos una capa de acceso a datos, lo que hemos hecho en el ejemplo anterior debería ser cambiado totalmente. Al contrario, veremos que el ejemplo anterior puede ser reconstruido facilmente para utilizar una capa de acceso a Datos. Consideremos la siguiente capa de acceso a datos:
Public Class Customers
Public Function GetCustomers() As DataSet
Dim cn As New SqlConnection( _
ConfigurationSettings.ConnectionStrings( _
"northwindConnection"))
Dim da As New SqlDataAdapter( _
"select customerid, companyname from customers", cn)
Dim ds As New DataSet
da.Fill(ds, "Customers")
Return ds
End Function
Public Function GetOrders(ByVal customerID As String) As DataSet
Dim cn As New SqlConnection( _
ConfigurationSettings.ConnectionStrings( _
"northwindConnection"))
Dim da As New SqlDataAdapter( _
"select * from orders where customerid=@customerid", cn)
da.SelectCommand.Parameters.Add( _
"@customerid", SqlDbType.NVarChar, 5)
da.SelectCommand.Parameters("@customerid").Value = customerID
Dim ds As New DataSet
da.Fill(ds, "Orders")
Return ds
End Function
End Class
|
El método GetCustomers retorna el identificador del cliente y su nombre. Esta información será mostrada en el control DropDownList. Cuando el usuario seleccione un cliente, el método GetOrders será invocado y se le pasará como parámetro el cliente seleccionado. En este momento, se retornarán las ordenes de este cliente. Obviamente, no utilizaremos un control SqlDataSource, porque no queremos que la página Web se comunique directamente con la base de datos. El control ObjectDataSource fue diseñado para este escenario. A través de la ventana de propiedades, podemos configurar un par de propiedades en el objeto ObjectDataSource, lo que generará el siguiente código:
< asp:objectdatasource
id="ObjectDataSource1"
runat="server"
typename="DAL.Customers"
selectmethod="GetCustomers">
|
Esto simplemente nos indica que el control ObjectDataSource instanciará la clase DAL.Customers, y llamará el método GetCustomers para obtener la información. Entonces, el control DropDownList estára ligado al control ObjectDataSource exactamente como estuvo ligado al control SqlDataSource.
Cuando el usuario seleccione un cliente del control DropDownList, el método GetOrders necesita ser llamado y el cliente seleccionado necesita ser pasado como su parámetro. Usando la ventana de propiedades, podemos especificar los parámetros de un método de una manera similar a la utilizada para especificar los parámetros para una consulta SQL, resultando el siguiente código:
< asp:objectdatasource
id="ObjectDataSource2"
runat="server"
typename="DAL.Customers"
selectmethod="GetOrders">
< selectparameters>
< asp:controlparameter
name="customerID"
propertyname="SelectedValue"
type="String"
defaultvalue=""
controlid="DropDownList1">
< /asp:controlparameter>
< /selectparameters>
< /asp:objectdatasource>
|
Como podemos observar, un elemento selectparameters ha sido añadido y contiene casi la misma información que cuando el control SqlDataSource fue utilizado. Se especifica el nombre del parámetro y se establece que la propiedad SelectedValue del control DropDownList1 debería usarse como el valor para este parámetro. Finalmente, el control GridView se enlaza al control ObjectDataSource. Esto implementa exactamente la misma funcionalidad que el primer ejemplo, pero usando una capa de acceso a datos para obtener la información. El control ObjectDataSource puese ser enlazado a cualquier método que retorne un objeto DataSet, o un objeto IEnumerable. Esto significa que el método podría retornar un objeto DataReader, ó podría retornar una colección de clases. Por ejemplo, la capa de acceso a datos podría haber retornado un ArrayList de clases Customer, y la interfaz de usuario debería funcionar de manera idéntica.
Comenta éste artículo en el foro de informatizate.
|
Copyright © 2002-2005 Grupo
Informatizate. Reservados todos los derechos.
Prohibida la reproducción total o parcial en cualquier
formato sin previa autorización.
On-line desde el 27 de Noviembre del 2002
|
|