You are on page 1of 30

Unidad didctica 7 Acceso a datos avanzado

Las tareas tpicas de acceso a datos de una aplicacin Web se pueden resolver de manera muy elegante y concisa mediante programacin declarativa en ASP.NET. No obstante, en ocasiones, precisaremos de un mayor control en las operaciones de acceso y presentacin de datos, o deberemos realizar tareas que por su especificidad, no estn cubiertas por las clases predefinidas del .NET Framework. El control DataGrid, presentado en la versin ASP.NET 2.0, a pesar de ser un control genrico, permite un nivel de personalizacin extraordinarios. Muchas tareas que anteriormente deban programarse manualmente, ahora puede implementarse sin ms que establecer los valores adecuados en las propiedades de este objeto. Si precisamos todava ms control, .NET Framework nos permite un contacto ms directo con la capa de acceso a datos y, sin necesidad de desvelar los detalles de implementacin de los proveedores de datos, controlar todo el proceso: desde la conexin hasta la recuperacin y modificacin de informacin. Al finalizar el estudio de estas lecciones sers capaz de: Conocer los tres esquemas de acceso a datos propuestos por ASP.NET. Utilizar el control DataGrid para mostrar, ordenar, paginar y editar datos en una aplicacin Web. Acceder directamente a una base de datos mediante el uso de comandos y lectores de datos.

Acceso a datos avanzado

Leccin 1 El control GridView (I)


El acceso a la informacin y la gestin eficaz de la misma es una de las principales metas de muchas aplicaciones Web actuales. Esta informacin se encuentra, por lo general, dispersa en multitud de orgenes de datos: correo electrnico, bases de datos, archivos La arquitectura de ADO.NET nos permite acceder a toda esta informacin utilizando una interfaz de programacin nica y homognea. ADO.NET nos ofrece dos enfoques para el acceso a datos. El primero de ellos, el desconectado, se adapta a la perfeccin a muchos escenarios tpicos de aplicaciones Web. Este enfoque hace uso del objeto DataSet, que nos permite almacenar y manipular los datos recuperados de un origen de datos a travs de un proveedor especfico. No obstante, todos estos componentes de ADO.NET nicamente proporcionan las herramientas de trabajo. Cmo mostramos la informacin al usuario?

Visin general
Para realizar el acceso a datos, una aplicacin basada en el marco de trabajo .NET utiliza las clases ofrecidas por ADO.NET: conexiones, comandos, adaptadores, lectores, conjuntos de datos Como sabemos, una aplicacin ASP.NET es un tipo especializado de aplicacin .NET, por lo que podemos utilizar este mismo enfoque. Sin embargo, al igual que sucede en otras reas, ASP.NET tambin simplifica enormemente la estrategia de acceso a datos. Utilizando una sintaxis declarativa, podemos llegar a ser capaces de resolver muchas de las necesidades ms comunes, como por ejemplo: Mostrar un conjunto de datos seleccionado desde un origen de datos. Ordenar y paginar datos. Crear, modificar y eliminar datos en un origen de datos. Crear vistas de datos del tipo maestro detalle.

La sintaxis declarativa de acceso a datos de ASP.NET se materializa en los denominados controles enlazados a datos. Esto controles no son otra cosa que controles estndar de ASP.NET, en los que los valores de ciertas propiedades se expresan mediante un lenguaje de marcado (expresiones de enlace a datos) que el motor de ejecucin de ASP.NET interpreta.

A pesar de estas facilidades, a medida que la complejidad de una aplicacin aumenta, se hace cada vez ms necesario el control preciso que nos ofrece ADO.NET.
Acceso a datos avanzado 2

Sin embargo, muchos escenarios de acceso a datos se encuentran en un punto intermedio del espectro: son demasiado complejos para utilizar exclusivamente la sintaxis declarativa, pero no lo suficiente como para requerir una programacin totalmente personalizada mediante ADO.NET. Es en estos casos cuando ASP.NET vuelve a ofrecernos una elegante solucin en forma de controles: controles de origen de datos y controles de presentacin de datos.

Controles de origen de datos


Un control de origen de datos es un control de ASP.NET cuya principal objetivo es la de actuar como vnculo entre nuestra aplicacin Web y un origen de datos. Las responsabilidades de este tipo de controles incluyen: Establecer la conexin con el origen de datos especificado. Gestionar las operaciones de obtencin de datos. Administrar la aplicacin de cambios en los datos. Al igual que sucede con las clases fundamentales de ADO.NET, los controles de origen de datos de ASP.NET se clasifican de acuerdo al origen de datos que van a utilizar, pero nos ofrecen una interfaz de programacin coherente y homognea. Los controles de origen de datos que incluye ASP.NET de serie son: ObjectDataSource: proporciona acceso a u objeto .NET que representa una entidad de negocio o de la lgica de la aplicacin. SqlDataSource: proporciona acceso a un origen de datos de tipo base de datos relacional a travs de un proveedor de datos .NET. Mediante este control podemos acceder a datos alojados en Microsoft SQL Server, Oracle y orgenes ODBC, entre otros. AccessDataSource: proporciona acceso a los objetos de una base de datos Microsoft Access. XmlDataSource: proporciona acceso a un origen de datos XML, como por ejemplo un documento XML alojado en disco.

Como ya comentamos con anterioridad, el uso de bases de datos Microsoft Access no est recomendado en el mbito de aplicaciones Web de tipo empresarial.

Acceso a datos avanzado

SqlDataSource
El control de origen de datos SqlDataSource representa un origen de datos de tipo base de datos SQL.

En Visual Studio, para agregar un control de origen de datos SqlDataSource desde el Diseador de pginas ASP.NET, utilizamos el siguiente botn del Cuadro de herramientas:

El aspecto del control de servidor en la vista Diseo de la pgina es:

La siguiente tabla recoge las principales propiedades de la clase SqlDataSource: Propiedad Descripcin Obtiene o establece el periodo de tiempo, expresado en segundos, que el control almacena en memoria cach los datos recuperados por una consulta de seleccin. Obtiene o establece el comportamiento de caducidad de cach que, cuando se combina con la duracin, describe el comportamiento de la cach que utiliza el control. Obtiene o establece una dependencia clave definida por el usuario que se vincula a todos los objetos de cach de datos creados por el control. Todos los objetos de cach caducan explcitamente cuando caduca la clave. Obtiene o establece un valor lgico que indica si se ha cancelado una operacin de recuperacin de datos cuando algn parmetro de la coleccin SelectParameters se evala como referencia de objeto null (Nothing en Visual Basic).
4

CacheDuration

CacheExpirationPolicy

CacheKeyDependency

CancelSelectOnNullParameter

Acceso a datos avanzado

Propiedad

Descripcin Obtiene o establece un valor que indica cmo el control realiza las modificaciones cuando cambia la base de datos durante la operacin. Obtiene o establece la cadena de conexin especfica del proveedor de datos ADO.NET que utiliza el control para conectarse a una base de datos. Obtiene o establece el modo de la recuperacin de datos que utiliza el control para obtener los datos. Obtiene o establece la cadena SQL que utiliza el control para eliminar datos de la base de datos. Obtiene o establece un valor que indica si el texto de la propiedad DeleteCommand es una instruccin SQL o el nombre de un procedimiento almacenado. Obtiene la coleccin de parmetros utilizados en las operaciones de eliminacin de datos. Obtiene o establece un valor lgico que indica si el almacenamiento en cach est habilitado. Obtiene o establece una expresin de filtrado que se aplica cuando se recuperan datos. Obtiene una coleccin de parmetros que estn asociados a los marcadores de posicin de la cadena FilterExpression. Obtiene o establece la cadena de SQL que utiliza el control para insertar datos en la base de datos. Obtiene o establece un valor que indica si el texto de la propiedad InsertCommand es una instruccin SQL o el nombre de un procedimiento almacenado.
5

ConflictDetection

ConnectionString

DataSourceMode

DeleteCommand

DeleteCommandType

DeleteParameters

EnableCaching

FilterExpression

FilterParameters

InsertCommand

InsertCommandType

Acceso a datos avanzado

Propiedad

Descripcin Obtiene la coleccin de parmetros utilizados en las operaciones de insercin de datos. Obtiene o establece el nombre del proveedor de datos de .NET Framework que utiliza el control para conectar a un origen de datos. Obtiene o establece la cadena de SQL que utiliza el control para recuperar datos de la base de datos. Obtiene o establece un valor que indica si el texto de la propiedad SelectCommand es una instruccin SQL o el nombre de un procedimiento almacenado. Obtiene la coleccin de parmetros utilizados en las operaciones de recuperacin de datos. Obtiene o establece la cadena de SQL que utiliza el control para actualizar datos en la base de datos. Obtiene o establece un valor que indica si el texto de la propiedad UpdateCommand es una instruccin SQL o el nombre de un procedimiento almacenado. Obtiene la coleccin de parmetros utilizados en las operaciones de actualizacin de datos.

InsertParameters

ProviderName

SelectCommand

SelectCommandType

SelectParameters

UpdateCommand

UpdateCommandType

UpdateParameters

La siguiente tabla recoge los principales mtodos de la clase SqlDataSource: Mtodo Descripcin Realiza una operacin de eliminacin mediante la cadena SQL DeleteCommand y los parmetros de la coleccin DeleteParameters. Realiza una operacin de insercin mediante la cadena SQL InsertCommand y los parmetros de la coleccin InsertParameters.
6

Delete

Insert

Acceso a datos avanzado

Select

Realiza una operacin de seleccin mediante la cadena SQL SelectCommand y los parmetros de la coleccin SelectParameters. Realiza una operacin de actualizacin mediante la cadena SQL UpdateCommand y los parmetros de la coleccin UpdateParameters.

Update

La siguiente tabla recoge los principales eventos de la clase SqlDataSource: Eventos Deleted Deleting Filtering Inserted Inserting Selected Selecting Updated Updating Descripcin Seala el final de una operacin de eliminacin. Seala el comienzo de una operacin de eliminacin. Seala el comienzo de una operacin de filtrado. Seala el final de una operacin de insercin. Seala el comienzo de una operacin de insercin. Seala el final de una operacin de seleccin. Seala el comienzo de una operacin de seleccin. Seala el final de una operacin de actualizacin. Seala el comienzo de una operacin de actualizacin.

Crea un origen de datos para la base de datos SQL Server eCommerce alojada en el servidor local que recupera todos los datos de la tabla Productos. <asp:SqlDataSource ID="ProductosECommerce" runat="server" ProviderName="System.Data.SqlClient" ConnectionString= "Data Source=localhost;Initial Catalog=eCommerce;" SelectCommand="SELECT * FROM Productos" />

Acceso a datos avanzado

GridView
El control GridView es uno de los principales controles de presentacin de datos que pone a nuestra disposicin ASP.NET.

El control GridView reemplaza al control DataGrid presente en versiones anteriores de ASP.NET y ahora considerado obsoleto.

Este control nos permite mostrar en forma tabular los elementos de un origen de datos. El control GridView ofrece, entre otras, las siguientes caractersticas: Enlace a controles de origen de datos. Capacidad de ordenacin de datos integrada. Funciones de actualizacin y eliminacin de datos integradas. Presentacin paginada de datos. Capacidad de seleccin de filas datos. Modelo de programacin declarativo y / o mediante cdigo. Aspecto personalizable mediante temas y estilos ASP.NET.

En Visual Studio, para agregar un control GridView desde el Diseador de pginas ASP.NET, utilizamos el siguiente botn del Cuadro de herramientas:

El aspecto del control de servidor en la vista Diseo de la pgina es:

Acceso a datos avanzado

La siguiente tabla recoge las principales propiedades de la clase GridView: Propiedad Descripcin Obtiene o establece un valor lgico que indica si la caracterstica de paginacin est habilitada. Obtiene o establece un valor lgico que indica si la caracterstica de ordenacin est habilitada. Obtiene el objeto TableItemStyle que permite establecer la apariencia de las filas de datos alternas del control. Obtiene o establece un valor lgico que indica si se deben crear automticamente campos enlazados para cada campo del origen de datos. Obtiene o establece un valor lgico que indica si se agrega automticamente una columna de campo CommandField con un botn Eliminar para cada fila de datos del control. Obtiene o establece un valor lgico que indica si se agrega automticamente una columna de campo CommandField con un botn Editar para cada fila de datos del control. Obtiene o establece un valor lgico que indica si se agrega automticamente una columna de campo CommandField con un botn Seleccionar para cada fila de datos del control. Obtiene o establece la direccin URL de una imagen que se va a mostrar en el fondo del control. Obtiene un objeto GridViewRow que representa la fila de paginacin inferior del control.

AllowPaging

AllowSorting

AlternatingRowStyle

AutoGenerateColumns

AutoGenerateDeleteButton

AutoGenerateEditButton

AutoGenerateSelectButton

BackImageUrl

BottomPagerRow

Acceso a datos avanzado

Propiedad

Descripcin Obtiene o establece el texto que se va a representar en un elemento de ttulo HTML del control. Esta propiedad se proporciona de modo que el control sea ms accesible para los usuarios de dispositivos de tecnologa de ayuda. Obtiene o establece la posicin horizontal o vertical del elemento de ttulo HTML del control. Esta propiedad se proporciona de modo que el control sea ms accesible para los usuarios de dispositivos de tecnologa de ayuda. Obtiene o establece la cantidad de espacio entre el contenido de una celda y el borde de la misma. Obtiene o establece la cantidad de espacio entre las celdas. Obtiene una coleccin de objetos DataControlField que representan los campos de columna del control. Obtiene o establece una matriz que contiene los nombres de los campos de clave principal de los elementos mostrados en el control. Obtiene una coleccin de objetos DataKey que representan el valor de clave de los datos de cada fila del control. Obtiene o establece el ndice de la fila que se va a editar. Obtiene una referencia al objeto TableItemStyle que permite establecer la apariencia de la fila seleccionada para ser editada en el control. Obtiene una referencia al objeto TableItemStyle que permite establecer la apariencia de la fila de datos vaca que se representa cuando el control no contiene registros.
10

Caption

CaptionAlign

CellPadding

CellSpacing

Columns

DataKeyNames

DataKeys

EditIndex

EditRowStyle

EmptyDataRowStyle

Acceso a datos avanzado

Propiedad

Descripcin Obtiene o establece el contenido definido por el usuario para la fila de datos vaca que se representa cuando el control se enlaza a un origen de datos que no contiene registros. Obtiene o establece el texto que se mostrar en la fila de datos vaca que se representa cuando el control se enlaza a un origen de datos que no contiene registros. Obtiene un objeto GridViewRow que representa la fila de pie de pgina del control. Obtiene una referencia al objeto TableItemStyle que permite establecer la apariencia de la fila de pie de pgina del control. Obtiene o establece el estilo de cuadrcula del control. Obtiene un objeto GridViewRow que representa la fila de encabezado del control. Obtiene una referencia al objeto TableItemStyle que permite establecer la apariencia de la fila de encabezado del control. Obtiene o establece la alineacin horizontal l control en la pgina. Obtiene el nmero de pginas necesarias para mostrar los registros del origen de datos en el control. Obtiene o establece el ndice de la pgina que se muestra actualmente. Obtiene una referencia al objeto PagerSettings que permite establecer las propiedades de los botones de paginacin del control.

EmptyDataTemplate

EmptyDataText

FooterRow

FooterStyle

GridLines

HeaderRow

HeaderStyle

HorizontalAlign

PageCount

PageIndex

PagerSettings

Acceso a datos avanzado

11

Propiedad

Descripcin Obtiene una referencia al objeto TableItemStyle que permite establecer la apariencia de la fila de paginacin del control. Obtiene o establece el contenido personalizado de la fila de paginacin del control. Obtiene o establece el nmero de registros que se van a mostrar en una pgina del control. Obtiene o establece el nombre de la columna que se utilizar como encabezado de columna para el control. Esta propiedad se proporciona de modo que el control sea ms accesible para los usuarios de dispositivos de tecnologa de ayuda. Obtiene una coleccin de objetos GridViewRow que representan las filas de datos del control. Obtiene una referencia al objeto TableItemStyle que permite establecer la apariencia de las filas de datos del control. Obtiene el objeto DataKey que contiene el valor de la clave de datos para la fila seleccionada en el control. Obtiene o establece el ndice de la fila seleccionada en el control. Obtiene una referencia a un objeto GridViewRow que representa la fila seleccionada en el control. Obtiene una referencia al objeto TableItemStyle que permite establecer la apariencia de la fila seleccionada en el control.

PagerStyle

PagerTemplate

PageSize

RowHeaderColumn

Rows

RowStyle

SelectedDataKey

SelectedIndex

SelectedRow

SelectedRowStyle

Acceso a datos avanzado

12

Propiedad

Descripcin Obtiene o establece un valor lgico que indica si se muestra la fila de pie de pgina en el control. Obtiene o establece un valor lgico que indica si se muestra la fila de encabezado en el control. Obtiene el sentido de ordenacin de la columna que se va a ordenar. Obtiene la expresin de ordenacin asociada a la columna o columnas que se van a ordenar. Obtiene un objeto GridViewRow que representa la fila de paginacin superior del control. Obtiene o establece un valor lgico que indica si el control representa su encabezado en un formato accesible. Esta propiedad se proporciona de modo que el control sea ms accesible para los usuarios de dispositivos de tecnologa de ayuda.

ShowFooter

ShowHeader

SortDirection

SortExpression

TopPagerRow

UseAccesibleHeader

Como puedes ver, algunas de las propiedades de este control estn enfocadas a hacerlo ms accesible para usuarios con algn tipo de discapacidad. La accesibilidad de la Web es un tema cada da ms importante, como lo demuestra la iniciativa WAI (Web Accesibility Initiative, Iniciativa de Accesibilidad Web) promovida por el W3C.

La siguiente tabla recoge los principales mtodos de la clase GridView: Mtodo DataBind DeleteRow Descripcin Enlaza el origen de datos al control. Elimina el registro en el ndice especificado del origen de datos.

Acceso a datos avanzado

13

Mtodo Sort

Descripcin Ordena el control segn la expresin y el sentido de ordenacin especificados. Actualiza el registro en el ndice de fila especificado utilizando los valores de campo de la fila.

UpdateRow

La siguiente tabla recoge los principales eventos de la clase GridView: Evento Descripcin Seala el clic en uno de los botones de paginacin despus de que el control se ocupe de la operacin de paginacin. Seala el clic en uno de los botones de paginacin antes de que el control se ocupe de la operacin de paginacin. Seala el clic en el botn Cancelar de una fila en modo de edicin antes de que la fila salga del mismo. Seala el clic en un botn del control. Seala la creacin de una fila en el control. Seala el enlace de datos de una fila del control. Seala el clic en el botn Eliminar de una fila despus de que el control elimine la misma. Seala el clic en el botn Eliminar de una fila antes de que el control elimine la misma. Seala el clic en el botn Actualizar de una fila despus de que el control actualice la misma. Seala el clic en el botn Actualizar de una fila antes de que el control actualice la misma.
14

PageIndexChanged

PageIndexChanging

RowCancelingEdit

RowCommand RowCreated

RowDataBound

RowDeleted

RowDeleting

RowUpdated

RowUpdating

Acceso a datos avanzado

Evento

Descripcin Seala el clic en el botn Seleccionar de una fila despus de que el control se ocupe de la operacin de seleccin. Seala el clic en el botn Seleccionar de una fila antes de que el control se ocupe de la operacin de seleccin. Seala el clic en el hipervnculo para ordenar una columna despus de que el control se ocupe de la operacin de ordenacin. Seala el clic en el hipervnculo para ordenar una columna antes de que el control se ocupe de la operacin de ordenacin.

SelectedIndexChanged

SelectedIndexChanging

Sorted

Sorting

Crea un control GridView, enlazado al origen de datos de productos eCommerce, que incluye un pi de pgina, botones de seleccin en cada fila y un tamao de pgina de 20 registros. <asp:GridView ID="VistaProductos" runat="server" DataSourceID="ProductosECommerce" AutoGenerateSelectButton="True" ShowFooter="True" PageSize="20" />

Resumen
En esta leccin has visto cmo ASP.NET te ofrece tres alternativas para el acceso a datos en una aplicacin Web: el uso directo de las clases ADO.NET, el enlace a datos puramente declarativo y el uso de controles de acceso a datos. Los controles de acceso a datos se dividen en controles de origen de datos y controles de presentacin de datos. Los primeros te permiten establecer el vnculo entre la aplicacin Web y el origen de datos, mientras que los segundos son los encargados de mostrar la informacin al usuario. Por ltimo, has aprendido los rudimentos del control GridView, uno de los controles de presentacin de datos ms flexibles que te ofrece ASP.NET.

Acceso a datos avanzado

15

Leccin 2 El control GridView (y II)


El control GridView incluye potentes caractersticas de presentacin de datos, entre las que se incluyen la ordenacin, paginacin y seleccin de datos. Sin embargo, este control va ms all e incorpora la capacidad de manipular los datos enlazados, aadiendo, actualizando e incluso eliminndolos. Todas estas posibilidades se traducen en un rico, y extenso, modelo de programacin que debemos conocer para aprovechar al mximo todas sus posibilidades.

Ordenar los datos


El control GridView nos permite realizar una ordenacin simple de los datos sin necesidad de escribir cdigo de manipulacin de datos especfico.

Entendemos como ordenacin simple aquella en la que los datos se ordenan de acuerdo a un nico criterio. Para realizar ordenaciones complejas, segn varios criterios, debemos escribir el cdigo de manipulacin de datos correspondiente. Para habilitar la ordenacin, una vez declarado el control GridView y establecido el enlace de datos, debemos completar los siguientes pasos: Establecer el valor de la propiedad AllowSorting al valor lgico Verdadero. Opcionalmente, establecer el valor de la propiedad SortExpression con la expresin que identifica el criterio de ordenacin inicial. Opcionalmente, deshabilitar la ordenacin en columnas especficas estableciendo su propiedad SortExpression en una cadena vaca.

En el caso de un origen de datos de tipo base de datos relacional, la expresin de ordenacin representar, por lo general, el nombre de una columna de una tabla.

Aplica como criterio de ordenacin inicial aquel que tenga ms sentido o sea utilizado con mayor frecuencia. De esta forma, el usuario del sitio Web dispondr, en la mayor parte de las situaciones, de unos datos ya ordenados.
Acceso a datos avanzado 16

Crea un control GridView, enlazado al origen de datos de productos eCommerce, que incluye ordenacin automtica de datos. Establece el orden predeterminado segn la columna de datos Precio. <asp:GridView ID="VistaProductos" runat="server" DataSourceID="ProductosECommerce" AllowSorting="true" SortExpression="Precio" />

Paginar los datos


El control GridView nos permite mostrar al usuario el conjunto resultado agrupado en pginas de datos. Esta forma de presentacin aporta la ventaja de ofrecer un conjunto de resultados ms sencillo de analizar visualmente.

La paginacin de los resultados no siempre es una cualidad deseable. Si el usuario debe visualizar todos los datos simultneamente (por ejemplo, para compararlos entre s) no debemos habilitar la paginacin.

Una ventaja adicional de la paginacin es que el control ofrece unos tiempos de latencia ms reducidos, ya que no debe recuperar todo el conjunto de resultados, sino nicamente aquellos datos que se van a mostrar en la pgina actual.

El proveedor de datos subyacente debe soportar la recuperacin selectiva de datos. La mayor parte de los orgenes de datos de tipo base de datos lo soportan, pero otros no. En estos casos, el control GridView simular la recuperacin selectiva. El control GridView nos ofrece varios modos de paginacin: NextPrevious: muestra los botones Anterior y Siguiente. NextPreviousFirstLast: muestra los botones Anterior, Siguiente, Primero y ltimo. Numeric: muestra un conjunto de botones numerado que representan cada una de las pginas de resultados. NumericFirstLast: muestra botones numerados que representan cada una de las pginas de resultados y los botones Primero y ltimo.
Acceso a datos avanzado 17

Para habilitar la paginacin, una vez declarado el control GridView y establecido el enlace de datos, debemos completar los siguientes pasos: Establecer el valor de la propiedad AllowPaging al valor lgico Verdadero. Opcionalmente, establecer el valor de la propiedad PageSize con nmero de registros que se mostrarn por pgina. Opcionalmente, establecer el valor de la propiedad PagerSettings-Mode al modo de paginacin deseado.

Crea un control GridView, enlazado al origen de datos de productos eCommerce, que incluye paginacin automtica de datos, con 10 registros por pgina. Utiliza el modo de paginacin NumericFirstLast. <asp:GridView ID="VistaProductos" runat="server" DataSourceID="ProductosECommerce" AllowPaging="True" PageSize="10" PagerSettings-Mode="NumericFirstLast"

/>

Seleccionar los datos


El control GridView no slo muestra los datos de un origen, sino que permite al usuario interactuar con los registros individuales a travs de un mecanismo de seleccin de filas.

La seleccin de datos nicamente es una operacin de tipo visual, es decir, sin consecuencias en el origen de datos. No obstante, la seleccin de datos es el primer paso para realizar operaciones sobre los mismos a travs del control GridView. Para habilitar la seleccin, una vez declarado el control GridView y establecido el enlace de datos, debemos completar los siguientes pasos: Establecer el valor de la propiedad AutoGenerateSelectButton al valor lgico Verdadero.

Personaliza el aspecto de las filas seleccionadas mediante la propiedad SelectedRowStyle. De esta forma, el usuario tendr una pista visual de qu filas estn seleccionadas.

Acceso a datos avanzado

18

Crea un control GridView, enlazado al origen de datos de productos eCommerce, que incluye seleccin automtica de datos. Establece el color de fondo de las filas seleccionadas a Plata. <asp:GridView ID="VistaProductos" runat="server" DataSourceID="ProductosECommerce" AutoGenerateSelectButton="True"> <SelectedRowStyle BackColor="Silver" /> </asp:GridView>

Manipular los datos


Tal y como ya hemos mencionado, el control GridView permite a los usuarios no slo visualizar los datos, sino tambin manipularlos.

Cualquier manipulacin de los datos por parte del usuario debe considerarse como una operacin potencialmente peligrosa. Por lo tanto, debemos disear la aplicacin Web de tal forma que los privilegios necesarios para ejecutarla sean los mnimos posibles, reduciendo as las consecuencias de un posible ataque malintencionado.

El control GridView nos permite realizar tres operaciones de manipulacin de datos: Edicin: modifica los datos existentes. Eliminacin: borrar los datos existentes. Insercin: agrega nuevos datos a los ya existentes. Para habilitar la edicin, una vez declarado el control GridView y establecido el enlace de datos, debemos completar los siguientes pasos: Establecer el valor de la propiedad UpdateCommand del origen de datos asociado a la expresin de actualizacin de datos. Establecer el valor de la propiedad ShowEditButton del campo de comando de las columnas al valor lgico Verdadero.

En el caso de un origen de datos de tipo base de datos, la expresin de actualizacin representar, por lo general, una sentencia UPDATE en lenguaje SQL o el nombre de un procedimiento almacenado.

Acceso a datos avanzado

19

Crea un origen de datos para la base de datos SQL Server eCommerce alojada en el servidor local que recupera todos los datos de la tabla Productos y permite su actualizacin. <asp:SqlDataSource ID="ProductosECommerce" runat="server" ProviderName="System.Data.SqlClient" ConnectionString= "Data Source=localhost;Initial Catalog=eCommerce;" SelectCommand="SELECT * FROM Productos" UpdateCommand="UPDATE Productos SET Nombre = @Nombre, Descripcion = @Descripcion, Precio = @Precio WHERE Codigo = @ Codigo" > <UpdateParameters> <asp:Parameter Name="Nombre" Type="String" /> <asp:Parameter Name="Descripcion" Type="String" /> <asp:Parameter Name="Precio" Type="Decimal" /> <asp:Parameter Name="Codigo" Type="Int32" /> </UpdateParameters> <asp:SqlDataSource /> Crea un control GridView, enlazado al origen de datos de productos eCommerce, que incluye seleccin automtica de datos y permite su edicin. <asp:GridView ID="VistaProductos" runat="server" DataSourceID="ProductosECommerce" AutoGenerateSelectButton="True"> <Columns> <asp:CommandField ShowEditButton="True" /> </Columns> </asp:GridView>

Recuerda que los detalles de sintaxis de los comandos y los parmetros son dependientes del tipo de proveedor de datos utilizado.

Acceso a datos avanzado

20

Alternativamente, podemos habilitar la edicin de datos estableciendo la propiedad AutoGenerateEditButton al valor lgico Verdadero.

Para habilitar la insercin y eliminacin de datos procederemos de manera anloga estableciendo las expresiones correspondientes del origen de datos.

Resumen
En esta leccin has visto algunas de las caractersticas avanzadas del control GridView, que van ms all de la simple presentacin de datos. Has aprendido a ordenar los datos, mostrar los resultados agrupados en pginas, seleccionar datos individuales y manipular los mismos; y todo ello sin necesidad de escribir cdigo especializado.

Acceso a datos avanzado

21

Leccin 3 Comandos y lectores de datos


Para acceder a los datos de una base de datos y trabajar con ellos se puede hacer permaneciendo conectados o sin conexin, trabajando sobre la memoria y transfiriendo los datos modificados o directamente sobre la base de datos, todo depender de la aplicacin. Hemos visto en lecciones anteriores cmo acceder a los datos almacenndolos en un conjunto de datos, ahora veremos cmo hacerlo trabajando directamente sobre la base de datos.

Visin general
Como hemos visto en lecciones anteriores un DataSet permite guardar la informacin, que ha trado de la base de datos, en una memoria cach y trabajar en modo desconectado. Un DataSet est formado por un grupo de objetos DataTable que pueden ser relacionados entre s por medio de objetos DataRelation. Puede acceder a datos independientemente del origen, por ejemplo, de SQL Server o de archivos XML. Tambin permite ver los datos de distintas maneras con el objeto DataView. Cuando se terminan de hacer las modificaciones de los datos, recordemos que se encuentran en una memoria cach, si queremos que estos se mantengan se establece nuevamente la conexin para actualizar los datos con los cambios realizados. Otra forma de acceso a datos que proporciona ADO.NET es realizar las operaciones directamente en la base de datos y leer los registros mediante un lector de datos. En este caso se usa un comando de datos con una instruccin SQL o una referencia a un procedimiento almacenado. Tanto las instrucciones SQL como los procedimientos almacenados se ejecutan llamando a consultas de TableAdapter o tambin por medio de la ejecucin de mtodos en objetos Command. Cuando se ha establecido la conexin con el origen de datos se puede hacer uso del objeto Command para ejecutar rdenes y devolver resultados. Algunas ventajas de trabajar directamente sobre la base de datos incluyen: Funcionalidad adicional. Para ejecutar operaciones DDL (Data Definition Languaje, Lenguaje de definicin de datos), no hay otra forma de sino a travs de los comandos de datos. Ms control sobre la ejecucin. Se puede tener un control ms directo sobre cmo y cundo se ejecuta una instruccin SQL o un procedimiento almacenado; tambin se obtiene mayor control sobre los resultados.

Acceso a datos avanzado

22

Menos operaciones de procesamiento. La lectura y escritura se hace directamente sobre la base de datos, ahorrando as el proceso de almacenamiento de la informacin en un conjunto de datos. Menor programacin. En algunos escenarios al utilizar un conjunto de datos se hace necesario programacin adicional. Manipulando directamente la base de datos se pueden evitar ese trabajo adicional. La utilidad de trabajar directamente sobre la base de datos se pone de manifiesto en situaciones como las siguientes: Consultas sobre datos que son slo de lectura. Consultas que devuelven un nico valor, como por ejemplo el resultado de un clculo. Creacin y modificacin de entidades de base de datos. En otras circunstancias es ms conveniente trabajar con un conjunto de datos: Para gestionar tablas relacionadas. Para intercambiar datos con otros procesos. Para trabajar con un conjunto esttico de registros. En muchos casos resultar indiferente utilizar una estrategia u otra. En esos casos debera prevalecer la economa de cdigo: escribir la menor cantidad posible de cdigo fuente.

Independientemente de la estrategia que utilices para acceder a los datos es importante minimizar la cantidad de informacin utilizada en una pgina. As conservars los recursos del servidor, que de otra forma podran agotarse si una consulta tiene que devolver una gran cantidad de datos innecesarios.

Trabajar directamente sobre la base de datos es posible gracias a los comandos y lectores de datos. Los comandos de datos se utilizan para encapsular instrucciones SQL y llamadas a procedimientos almacenados. Utilizaremos un comando de datos para cada operacin, ya que estas se ejecutan de forma independiente. Un objeto lector de datos recoge los datos de la base de datos y los pasa a la aplicacin. El marco de trabajo .NET suministra un objeto lector de datos para cada uno de los proveedores de datos: SqlDataReader, OleDbDataReader, OdbcDataReader y OracleDataReader.

Acceso a datos avanzado

23

Command
Un comando de datos representa una instruccin SQL o una llamada a un procedimiento almacenado que puede ser ejecutado directamente. Es una instancia de una clase segn el proveedor de datos: OdbcCommand, OleDbCommand, OracleCommand o SqlCommand. Los comandos de datos permiten llevar a cabo acciones como estas: Ejecutar sentencias Select para que devuelvan resultados que, por medio de un lector de datos, puedan ser ledos directamente. El lector de datos tiene un comportamiento de slo lectura y de slo avance. Ejecutar comandos de definicin de base de datos que permitan crear, editar y quitar tablas, estructuras de base de datos como tablas o procedimientos almacenados. Ejecutar comandos para obtener informacin del catlogo de dase de datos. Ejecutar comandos SQL dinmicos. Ejecutar comandos que devuelven un nico valor. La informacin que requiere el comando de datos para ejecutar los comandos con la base de datos son: Conexin Nombre del comando Parmetros Referencia a una conexin para comunicarse con la base de datos. Una instruccin SQL o el nombre de un procedimiento almacenado. De entrada o salida, para establecer o leer individualmente valores.

Los procedimientos almacenados agrupan las operaciones de base de datos en un nico comando, optimizndolas para producir un mayor rendimiento y coherencia lgica. Para llamar a un procedimiento almacenado hay que pasar su nombre en forma de instruccin SQL, seguido de los argumentos de parmetros.

El uso de parmetros depende sensiblemente del proveedor de datos.

Acceso a datos avanzado

24

Proveedor de datos para SQL Server Los nombres de los parmetros agregados a la coleccin Parameters deben coincidir con los nombres de los marcadores de parmetros del procedimiento almacenado. Trata los parmetros del procedimiento almacenado como parmetros con nombre y busca los marcadores de parmetros que coinciden. No permite utilizar el marcador de posicin de signo de interrogacin de cierre (?). Deben utilizarse parmetros con nombre.

Proveedor de datos para OLE DB y ODBC El orden de los parmetros agregados a la coleccin Parameters debe coincidir con el orden de los parmetros del procedimiento almacenado. Trata los parmetros del procedimiento almacenado como marcadores de posicin y aplica los valores de los parmetros siguiendo el orden. No permite utilizar parmetros con nombre. Debe utilizarse el marcador de posicin de signo de interrogacin de cierre (?).

Cuando queremos realizar consultas de seleccin se utiliza la instruccin SELECT que recupera filas de la base de datos y habilita la seleccin de una o varias filas o columnas. En la mayora de las ocasiones se deben suministrar las siguientes especificaciones: Las columnas que debe devolver (SELECT). Las tablas que se utilizan en la instruccin (FROM). La condicin de bsqueda que las filas deben cumplir (WHERE). El ordenamiento de las columnas en los resultados (ORDER BY). Para insertar, modificar o eliminar datos de una base de datos utilizamos el mtodo ExecuteNonQuery, que nos devolver el nmero de filas afectadas.

SqlCommand Esta clase representa un procedimiento almacenado o una instruccin de TransactSQL que se ejecuta en una base de datos de SQL Server. Su sintaxis es la siguiente: 'Declaracin PublicNotInheritableClassSqlCommand InheritsDbCommand ImplementsICloneable 'Uso DiminstanceAsSqlCommand

Acceso a datos avanzado

25

La siguiente tabla recoge las principales propiedades de la clase SqlCommand: Propiedad Descripcin Obtiene o establece el procedimiento almacenado o la instruccin de Transact-SQL que se ejecuta en el origen de datos. Obtiene o establece el tiempo de espera antes de terminar el intento de ejecutar un comando y generar un error. Obtiene o establece un valor que indica cmo se interpreta la propiedad CommandText. Obtiene o establece la conexin SqlConnection que utiliza esta instancia de SqlCommand. Obtiene la coleccin SqlParameterCollection. Obtiene o establece la transaccin SqlTransaction en la que se ejecuta el comando.

CommandText

CommandTimeout

CommandType

Connection

Parameters

Transaction

La siguiente tabla recoge los principales mtodos de la clase SqlCommand: Mtodo Descripcin Ejecuta una instruccin de Transact-SQL en la conexin y devuelve el nmero de filas afectadas. Enva la propiedad CommandText a Connection y crea un objeto SqlDataReader. Ejecuta la consulta y devuelve la primera columna de la primera fila del conjunto de resultados devuelto por la consulta. Las dems columnas o filas no se tienen en cuenta.

ExecuteNonQuery

ExecuteReader

ExecuteScalar

Acceso a datos avanzado

26

Mtodo ExecuteXmlReader

Descripcin Enva CommandText a Connection y crea un objeto XmlReader.

La siguiente tabla recoge los principales eventos de la clase SqlCommand: Evento StatementCompleted Descripcin Seala el final de la ejecucin de una instruccin Transact-SQL.

' Abrimos la conexin con la base de datos eCommerce. Dim conexion As New SqlConnection( _ "Data Source=localhost;Initial Catalog=eCommerce;") conexion.Open() ' Definimos un comando que calcula el nmero de productos. Dim comando As New SqlCommand comando.Connection = conexion comando.CommandText = "SELECT COUNT(*) FROM Productos" ' Ejecutamos el comando en modo escalar. Dim numeroProductos As Integer = _ CInt(comando.ExecuteScalar())

DataReader
El objeto DataReader se utiliza para recuperar informacin de una base de datos en modo de slo lectura y de slo avance. Los resultados se almacenan en el bfer para ser solicitados posteriormente con el mtodo Read del DataReader. Con este objeto se puede lograr reducir la sobrecarga del sistema ya que con su forma de funcionamiento permite aumentar el rendimiento de la aplicacin. Existe un lector de datos especfico para cada proveedores de datos de .NET: SqlDataReader, OdbcDataReader, OleDbDataReader y OracleDataReader. El objeto DataReader trabaja en colaboracin con el objeto Command para recuperar las filas de un origen de datos. Mientras se usa el lector de datos se mantiene abierta la conexin con la base de datos, pero cuando ya no lo necesitamos debemos hacer una llamada al mtodo Close del DataReader, para que libere la conexin.

Acceso a datos avanzado

27

Las principales ventajas de usar un DataReader incluyen, entre otras: Aumenta el rendimiento, ya que no recupera toda la informacin simultneamente en la memoria de nuestro equipo; se evitan as el consumo excesivo de recursos y los tiempos de latencia elevados asociados a la lectura de grandes conjuntos de datos. Permite indicar ms de una seleccin de registros. Sin embargo, el uso de un lector de datos tambin incurre en ciertas desventajas: Usa de forma exclusiva la conexin a la base de datos, por lo que no es posible utilizar de forma simultnea dos lectores sobre una misma conexin. No permite un acceso aleatorio a los datos, ni la modificacin de los mismos. SqlDataReader Esta clase proporciona una forma de leer una secuencia de filas slo hacia delante en una base de datos SQL Server. Su sintaxis es la siguiente: 'Declaracin PublicClassSqlDataReader InheritsDbDataReader ImplementsIDataReader,IDisposable,IDataRecord 'Uso DiminstanceAsSqlDataReader

Para crear una instancia de SqlDataReader debes usar el mtodo ExecuteReader del objeto SqlCommand.

La siguiente tabla recoge las principales propiedades de la clase SqlDataReader: Propiedad Connection Descripcin Obtiene el objeto SqlConnection asociado al lector. Obtiene un valor que indica la profundidad del anidamiento de la fila actual. Obtiene el nmero de columnas de la fila actual.
28

Depth

FieldCount
Acceso a datos avanzado

Propiedad HasRows

Descripcin Obtiene un valor que indica si el lector contiene una o varias filas. Recupera un valor lgico que indica si se ha cerrado la instancia del lector. Obtiene el valor de una columna en su formato nativo. Obtiene el nmero de filas cambiadas, insertadas o eliminadas por la ejecucin de una instruccin de Transact-SQL. Obtiene el nmero de campos del lector que no estn ocultos.

IsClosed

Item

RecordsAffected

VisibleFieldCount

La siguiente tabla recoge los principales mtodos de la clase SqlDataReader: Mtodo Close Descripcin Cierra el lector. Desplaza el lector al siguiente resultado cuando se leen los resultados de las instrucciones de Transact-SQL por lotes. Desplaza el lector hasta el siguiente registro.

NextResult

Read

' Abrimos la conexin con la base de datos eCommerce. Dim conexion As New SqlConnection( _ "Data Source=localhost;Initial Catalog=eCommerce;") conexion.Open() ' Definimos un comando devuelve nmero de productos. Dim comando As New SqlCommand("SELECT * FROM Productos", _ conexion) ' Recorremos el conjunto de resultados. Dim lector As SqlDataReader = comando.ExecuteReader() While (lector.Read()) ' Utilizamos los datos recuperados. End While

Acceso a datos avanzado

29

Resumen
En esta leccin hemos estudiado la forma de acceder a una base de datos de forma directa y has visto qu ventajas, e inconvenientes, presenta este enfoque. Tambin has aprendido la forma de utilizar los objetos Command y DataReader, particularizados al caso de acceso a una base de datos SQL Server.

Acceso a datos avanzado

30