Professional Documents
Culture Documents
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.
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.
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.
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:
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
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
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
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" />
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:
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
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
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
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
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.
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
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.
15
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" />
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"
/>
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.
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>
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.
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.
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.
21
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.
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.
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.
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
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
26
Mtodo ExecuteXmlReader
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.
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
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.
30