Vous êtes sur la page 1sur 12

Prctica A: Acceso a datos con Microsoft ADO.

NET
Logon Page Logon Page
Login.aspx Login.aspx Coho Winery

Benefits Benefits Home Page Home Page


Default.aspx Default.aspx

Registration Registration
Register.aspx Register.aspx

Menu Menu Component Component

Page Header Page Header


Header.ascx Header.ascx

ASPState

Class1.vb or Class1.cs Class1.vb or Class1.cs

Web. config

tempdb

Life Insurance Life Insurance


Life.aspx Life.aspx

Retirement Retirement
Retirement.aspx Retirement.aspx

Medical Medical

Medical.aspx Medical.aspx

Dental Dental

Dental.aspx Dental.aspx

Lab Web Application

Prospectus Prospectus
Prospectus.aspx Prospectus.aspx

Doctors Doctors

Doctors.aspx Doctors.aspx

User Control User


namedate.ascx namedate.ascx

XML Web XML Web Service Service

dentalService1.asmx dentalService1.asmx

XML Files

Doctors

Dentists

Objetivos

En este laboratorio, aprenderemos a: Recuperar datos de una base de datos Microsoft SQL Server utilizando los objetos SqlConnection y SqlDataAdapter. Almacenar datos en un objeto DataSet y mostrar esos datos a los usuarios en un control DataGrid. Recuperar datos de una base de datos SQL Server utilizando los objetos SqlConnection y SqlDataReader. Vincular un objeto SqlDataReader a un control DataGrid para mostrar datos. Nota Este laboratorio se centra en los conceptos de este mdulo. Por ello, podra no cumplir las recomendaciones de seguridad de Microsoft. Por ejemplo, este laboratorio no cumple la recomendacin de que todo el acceso a datos se realice a travs de procedimientos almacenados.

Requisitos previos

Para trabajar en este laboratorio, es necesario tener: Conocimientos sobre cmo utilizar los objetos SqlConnection, SqlDataAdapter, SqlDataReader y DataSet de Microsoft ADO.NET para leer datos de una base de datos SQL Server. Conocimientos sobre cmo mostrar datos DataSet en un control DataGrid.

Escenario

Coho Winery ofrece varios beneficios a sus empleados. En los laboratorios de este curso, crearemos un sitio Web que permita a los empleados seleccionar y configurar los beneficios que elijan. Uno de los beneficios que ofrece Coho Winery es el seguro mdico. Cuando se solicita un seguro mdico, el usuario debe seleccionar un mdico de cuidados primarios. Los doctores aprobados por la compaa aparecen en una lista de una base de datos SQL Server denominada doctors. La base de datos tambin incluye las direcciones de los doctores. En este laboratorio, mejoraremos la pgina doctors.aspx del sitio Web de Coho Winery para permitir a los usuarios que generen una lista de los doctores de ciudades concretas.

Tiempo estimado para completar el laboratorio: 30 minutos

Ejercicio 0 Configuracin del laboratorio


Para realizar este laboratorio, es necesario haber creado el proyecto de la aplicacin Web Benefits y el proyecto de la biblioteca de clases BenefitsList. Estos proyectos pueden haberse creado utilizando Visual Basic .NET o Microsoft Visual C# .NET. Si no se han creado estos proyectos, realizar los siguientes pasos: Crear la solucin LabApplication Importante Realizar este procedimiento nicamente si no se ha creado un archivo de solucin LabApplication. 1. Utilizando Visual Studio .NET, crear una nueva solucin en blanco denominada LabApplication: a. En el men Archivo, seleccionar Nuevo, y hacer clic en Solucin en blanco. b. En el cuadro de dilogo Nuevo proyecto, escribir LabApplication en el cuadro de texto Nombre y hacer clic en Aceptar. Crear el proyecto Benefits Importante Realizar este procedimiento nicamente si no se ha creado anteriormente un proyecto Benefits, o si se ha eliminado. 1. Crear un nuevo proyecto de aplicacin Web ASP.NET, denominado BenefitsVB o BenefitsCS, en la solucin LabApplication: a. En el men Archivo, seleccionar Nuevo, y hacer clic en Proyecto. b. En el cuadro de dilogo Nuevo proyecto, en la lista Tipos de proyecto, hacer clic en Proyectos de Visual Basic o Proyectos de Visual C#. c. En la lista Plantillas, hacer clic en Aplicacin Web ASP.NET, establecer la ubicacin en http://localhost/BenefitsVB para el proyecto Visual Basic .NET o en http://localhost/BenefitsCS para el proyecto Visual C#. d. Hacer clic en Agregar a Solucin, y hacer clic en Aceptar. Precaucin Cuando se agregan proyectos a la solucin, es importante el uso de maysculas en el nombre del proyecto. Probablemente, utilizaremos algunos formularios Web Forms ya generados en ste y en otros laboratorios, por ello, debemos verificar que hemos escrito con maysculas el nombre del proyecto Benefits.

Actualizar el proyecto Benefits 1. En Visual Studio .NET, abrir el archivo de solucin LabApplication. 2. En el Explorador de soluciones, hacer clic con el botn derecho en BenefitsListVB o BenefitsListCS, seleccionar Agregar y hacer clic en Agregar elemento existente. 3. Buscar los archivos de proyecto. Para el proyecto Visual Basic .NET Para el proyecto Visual C# Ir a la carpeta VB\Starter\BenefitsVB Ir a la carpeta CS\Starter\BenefitsCS. Estas carpetas pueden encontrarse dentro del fichero labs08.zip 4. En el cuadro Archivos de tipo del cuadro de dilogo Agregar elemento existente BenefitsList, hacer clic en Todos los archivos (*.*). 5. Seleccionar todos los archivos de la carpeta y hacer clic en Abrir. 6. Hacer clic en S a la pregunta de sobrescribir o recargar los archivos. Crear la biblioteca de clases BenefitsList Importante Realizar este procedimiento nicamente si no se ha creado anteriormente un proyecto BenefitsList, o si se ha eliminado. 1. Crear un nuevo proyecto de biblioteca de clases. Para el proyecto Visual Basic .NET Crear un nuevo proyecto de biblioteca de clases Microsoft Visual Basic .NET con el nombre BenefitsListVB, y agregarlo a la solucin LabApplication: a. En el men Archivo, seleccionar Nuevo y hacer clic en Proyecto. b. En el cuadro de dilogo Nuevo proyecto, en la lista Tipos de proyecto, hacer clic en Proyectos de Visual Basic. c. En la lista Plantillas, hacer clic en Biblioteca de clases, establecer el Nombre de BenefitsListVB. d. Hacer clic en Agregar a solucin, y clic en Aceptar. Para el proyecto Visual C# Crear un nuevo proyecto de biblioteca de clases Microsoft Visual C# .NET con el nombre BenefitsListCS, y agregarlo a la solucin LabApplication: a. En el men Archivo, seleccionar Nuevo y hacer clic en Proyecto. b. En el cuadro de dilogo Nuevo proyecto, en la lista Tipos de proyecto, hacer clic en Proyectos de Visual C#. c. En la lista Plantillas, hacer clic en Biblioteca de clases, establecer el Nombre a BenefitsListCS. d. Hacer clic en Agregar a solucin, y clic en Aceptar. Precaucin Verificar que se han escrito correctamente las maysculas del proyecto BenefitsList.

Actualizar el proyecto BenefitsList 1. En Visual Studio .NET, abrir el archivo de solucin LabApplication. 2. En el Explorador de soluciones, hacer clic con el botn derecho en BenefitsListVB o BenefitsListCS, seleccionar Agregar y hacer clic en Agregar elemento existente. 3. Ir al proyecto BenefitsList. Para el proyecto Visual Basic .NET Para el proyecto Visual C# Ir a la carpeta VB\Starter\BenefitsListVB. Ir a la carpeta CS\Starter\BenefitsListCS. Estas carpetas pueden encontrarse dentro del fichero labs08.zip 4. En el cuadro Archivos del tipo del cuadro de dilogo Agregar elemento existente BenefitsList, hacer clic en Todos los archivos (*.*). 5. Seleccionar todos los archivos de la carpeta y hacer clic en Abrir. 6. Hacer clic en S a la pregunta de sobrescribir o recargar los archivos. Crear una referencia al componente BenefitsList del proyecto Benefits 1. En el proyecto Benefits de la solucin LabApplication, completar los siguientes pasos para agregar una referencia al componente BenefitsList que acabamos de crear: a. Hacer clic con el botn derecho en el proyecto BenefitsVB o BenefitsCS en el Explorador de soluciones y hacer clic en Agregar referencia. b. En el cuadro de dilogo Agregar referencia, en la pestaa Proyectos, hacer doble clic en el proyecto BenefitsListVB o BenefitsListCS. c. En la lista Componentes seleccionados, seleccionar el componente BenefitsListVB o BenefitsListCS, y hacer clic en Aceptar. El componente se agrega a la carpeta Referencias en el Explorador de soluciones.

Ejercicio 1 Utilizar un SqlDataReader


En este ejercicio, rellenaremos un cuadro de lista en la pgina doctors.aspx con las ciudades donde se encuentran los doctores. Cuando el usuario selecciona una ciudad, crearemos una nueva vista DataSet de los datos y mostraremos los datos en el DataGrid. Agregar el cuadro lista 1. Abrir la pgina doctors.aspx del proyecto BenefitsVB o BenefitsCS. 2. Mediante una operacin de arrastrar y soltar, ubicar un control DropDownList en la pgina doctors.aspx, como muestra la siguiente ilustracin. El cuadro de lista mostrar las ciudades donde se encuentran los doctores.

3. Establecer la propiedad ID del control DropDownList en lstCities. Leer la lista de ciudades de la base de datos doctors 1. Abrir la pgina de cdigo subyacente de la pgina doctors.aspx, doctors.aspx.vb o doctors.aspx.cs, e ir al procedimiento de evento Page_Load. Visual C# 2. Si se est utilizando C# para completar este laboratorio, introducir la siguiente instruccin using tras las instrucciones using en la parte superior del archivo doctors.aspx.cs.
using System.Data.SqlClient;

3. Localizar el siguiente comentario: Visual Basic .NET C#


'TODO Lab10: bind the listbox to city field in the doctors table //TODO Lab10: bind the listbox to city field in the doctors table

4. Escribir cdigo para crear un objeto SqlCommand y leer el campo city de la tabla doctors en la base de datos SQL Server doctors. Utilizar el objeto SqlConnection que se ha creado en la pgina.

El comando SqlCommand debera ser "SELECT city FROM doctors." 5. Escribir cdigo para abrir la conexin a la base de datos. 6. Escribir cdigo para crear un objeto SqlDataReader desde el objeto SqlCommand invocando el mtodo ExecuteReader del objeto SqlCommand. 7. Escribir cdigo para establecer las propiedades de la lista desplegable lstCities como se muestra en la siguiente tabla.
Propiedad DataSource DataTextField Valor Objeto SqlDataReader "city"

8. Escribir cdigo para invocar el mtodo DataBind del cuadro de lista desplegable lstCities. 9. Escribir cdigo para cerrar los objetos DataReader y Connection. El cdigo debera ser similar al siguiente: Visual Basic .NET
Dim cmdCities As New SqlCommand _ ("SELECT city FROM doctors", SqlConnection1) Dim drCities As SqlDataReader SqlConnection1.Open() drCities = cmdCities.ExecuteReader() lstCities.DataSource = drCities lstCities.DataTextField = "city" lstCities.DataBind() drCities.Close() SqlConnection1.Close() SqlCommand cmdCities = new SqlCommand ("Select city FROM doctors", sqlConnection1); sqlDataReader drCities; sqlConnection1.Open(); drCities = cmdCities.ExecuteReader(); lstCities.DataSource = drCities; lstCities.DataTextField = "city"; lstCities.DataBind(); drCities.Close(); sqlConnection1.Close();

C#

10. Generar y examinar la pgina doctors.aspx. El cuadro de lista desplegable City debera mostrar la lista de ciudades donde se encuentran los doctores. Observar que el cuadro lista City muestra una ciudad por cada fila de la base de datos. Aunque este mtodo funciona, no es la forma ms amigable de mostrar la informacin sobre las ciudades. Qu podemos hacer para mejorarlo? ____________________________________________________________ ____________________________________________________________ Nota El Laboratorio Invocar procedimientos almacenados con Microsoft ADO.NET presenta una solucin a este problema.

Crear un DataView para el DataGrid 1. Establecer a true la propiedad AutoPostBack del cuadro de lista desplegable lstCities. 2. Crear un procedimiento de evento SelectedIndexChanged para el cuadro de lista desplegable lstCities. En el procedimiento de evento SelectedIndexChanged, agregaremos el cdigo para mostrar en el control DataGrid nicamente los doctores de la ciudad seleccionada. Por ejemplo, si se selecciona Seattle en el cuadro de lista desplegable, el control DataGrid nicamente mostrar doctores de esta ciudad. 3. Leer la ciudad seleccionada en el cuadro de lista desplegable lstCities y almacenar el nombre de la ciudad en una variable String denominada strCity. 4. Rellenar el DataSet DsDoctors1 utilizando el DataAdapter sqlDataAdapter1. 5. Crear un nuevo DataView desde Table(0) del DataSet. 6. Establecer la propiedad RowFilter del DataView para mostrar nicamente los registros en los que el campo city sea igual a la ciudad seleccionada en el cuadro de lista desplegable lstCities. 7. Establecer la propiedad DataSource del control DataGrid al nuevo DataView.

8. Invocar el mtodo DataBind del control DataGrid. El cdigo debera ser similar al siguiente: Visual Basic .NET
Dim strCity As String = Trim(lstCities.SelectedItem.Value) SqlDataAdapter1.Fill(DsDoctors1) Dim dvDocs As New DataView(DsDoctors1.Tables(0)) dvDocs.RowFilter = "city = '" & strCity & "'" dgDoctors.DataSource = dvDocs dgDoctors.DataBind() string strCity = lstCities.SelectedItem.Value.Trim(); sqlDataAdapter1.Fill(dsDoctors1); DataView dvDocs = new DataView(dsDoctors1.Tables[0]); dvDocs.RowFilter = "City = '" + strCity + "' "; dgDoctors.DataSource = dvDocs; dgDoctors.DataBind();

C#

9. En vista de Diseo, eliminar la configuracin de las propiedades DataSource y DataMember para el control DataGrid: a. En la pgina doctors.aspx, seleccionar el control DataGrid dgDoctors. b. En la ventana Propiedades, seleccionar DataMember, resaltar el valor doctors, y pulsar SUPRIMIR. c. En la ventana Propiedades, seleccionar DataSource, resaltar el valor dsDoctors1, y pulsar SUPRIMIR. Nota Estamos eliminando estas configuraciones de propiedades porque entran en conflicto con el cdigo que hemos agregado en los pasos anteriores. Cuando las propiedades se establecen tanto en el cdigo como en la interfaz de usuario (IU), el resultado obtenido es impredecible. 10. En el procedimiento de evento Page_Load, inmediatamente despus del cdigo para rellenar el objeto DataSet dsDoctors1, establecer el DataSource del DataGrid dgDoctors al objeto DataSet DsDoctors1. El cdigo debera ser similar al siguiente, con la lnea recin agregada en negrita: Visual Basic .NET
SqlDataAdapter1.Fill(DsDoctors1) dgDoctors.DataSource = DsDoctors1 dgDoctors.DataBind() sqlDataAdapter1.Fill(dsDoctors1); dgDoctors.DataSource = dsDoctors1; dgDoctors.DataBind();

C#

11. Generar y examinar la pgina doctors.aspx. Cuando seleccionamos una ciudad en el cuadro de lista City, el DataGrid dgDoctors muestra nicamente los doctores ubicados en la ciudad seleccionada.

Ejercicio 2 Visualizar doctores de todas las ciudades


En este ejercicio, agregaremos la opcin All al cuadro de lista desplegable City y restableceremos la funcionalidad a la pgina Web doctors.aspx, que restablecer los controles del cuadro de lista DataGrid y Specialties a una configuracin predeterminada. Agregar un elemento [All] al cuadro lista 1. Abrir la pgina de cdigo subyacente para la pgina doctors.aspx, doctors.aspx.vb o doctors.aspx.cs, e ir al procedimiento de evento Page_Load. 2. Localizar el siguiente comentario: Visual Basic .NET C#
'TODO Lab10: add the "All" item to the list and select it //TODO Lab10: add the "All" item to the list and select it

3. Invocar el mtodo Add de la coleccin lstCities.Items para agregar un nuevo elemento a la lista denominado [All]. 4. Establecer la propiedad SelectedIndex del cuadro de lista desplegable lstCities al ltimo elemento de la lista (que es el elemento [All] que acabamos de aadir). El cdigo debera ser similar al siguiente: Visual Basic .NET C#
lstCities.Items.Add("[All]") lstCities.SelectedIndex = lstCities.Items.Count 1 lstCities.Items.Add("[All]"); lstCities.SelectedIndex = lstCities.Items.Count 1;

Comprobar la seleccin de [All] en el procedimiento de evento SelectedIndexChanged 1. En el archivo doctors.aspx.vb o the doctors.aspx.cs, ir al procedimiento de evento lstCities_SelectedIndexChanged. 2. Agregar una prueba al procedimiento de evento lstCities_SelectedIndexChanged, despus de rellenar el DataSet, pero antes de invocar el mtodo DataBind, para ver si el elemento [All] estaba seleccionado. 3. Si el elemento [All] est seleccionado, establecer el DataSource del control dgDoctors DataGrid a todo el DataSet DsDoctors1. 4. Si una ciudad est seleccionada en el cuadro de lista desplegable lstCities, crear un DataView para mostrar nicamente los doctores ubicados en esa ciudad, y asignar el DataSource del DataGrid dgDoctors al DataView. 5. Invocar la funcin reset para eliminar las pginas o selecciones del DataGrid. La funcin reset ya est en la pgina de cdigo subyacente doctors.aspx.vb o doctors.aspx.cs.

El procedimiento de evento lstCities_SelectedIndexChanged debera ser similar al siguiente: Visual Basic .NET
Private Sub lstCities_SelectedIndexChanged(... Dim strCity As String = _ Trim(lstCities.SelectedItem.Value) SqlDataAdapter1.Fill(DsDoctors1) If strCity = "[All]" Then dgDoctors.DataSource = DsDoctors1 Else Dim dvDocs As New DataView(DsDoctors1.Tables(0)) dvDocs.RowFilter = "city = '" & strCity & "'" dgDoctors.DataSource = dvDocs End If reset() dgDoctors.DataBind() End Sub

C#

private void lstCities_SelectedIndexChanged(... { string strCity = lstCities.SelectedItem.Value.Trim(); sqlDataAdapter1.Fill(dsDoctors1); if (strCity == "[All]") { dgDoctors.DataSource = dsDoctors1; } else { DataView dvDocs = new DataView(dsDoctors1.Tables[0]); dvDocs.RowFilter = "city = '" + strCity + "'"; dgDoctors.DataSource = dvDocs; } reset(); dgDoctors.DataBind(); }

6. Generar y examinar la pgina doctors.aspx. 7. Hacer clic en el cuadro de lista desplegable City. Deberamos ver nicamente los doctores de esa ciudad. 8. Hacer clic en [All] en el cuadro de lista desplegable City. Deberamos ver todos los doctores de la base de datos doctors. Paginacin con la seleccin de ciudad 1. En el archivo doctors.aspx.vb o the doctors.aspx.cs, ir al procedimiento de evento dgDoctors_PageIndexChanged existente. 2. Recuperar el elemento actualmente seleccionado del cuadro de lista desplegable lstCities y guardarlo en una variable denominada strCity.

3. Agregar una prueba, despus de rellenar el DataSet, pero antes de invocar el mtodo DataBind, para ver si el elemento [All] estaba seleccionado. 4. Si el elemento [All] est seleccionado, establecer la propiedad DataSource del DataGrid dgDoctors a todo el DataSet DsDoctors1. 5. Si una ciudad est seleccionada en el cuadro de lista desplegable lstCities, crear un DataView para mostrar nicamente los doctores que estn ubicados en esa ciudad, y establecer la propiedad DataSource del DataGrid dgDoctors al DataView. Al finalizar, todo el procedimiento de evento dgDoctors_PageIndexChanged debera ser similar al siguiente: Visual Basic .NET
Private Sub dgDoctors_PageIndexChanged(... Dim strCity As String = _ Trim(lstCities.SelectedItem.Value) dgDoctors.CurrentPageIndex = e.NewPageIndex SqlDataAdapter1.Fill(DsDoctors1) If strCity = "[All]" Then dgDoctors.DataSource = DsDoctors1 Else Dim dvDocs As New DataView(DsDoctors1.Tables(0)) dvDocs.RowFilter = "city = '" & strCity & "'" dgDoctors.DataSource = dvDocs End If dgDoctors.DataBind() End Sub

C#

private void dgDoctors_PageIndexChanged(... { string strCity = lstCities.SelectedItem.Value.Trim(); dgDoctors.CurrentPageIndex = e.NewPageIndex; sqlDataAdapter1.Fill(dsDoctors1); if (strCity == "[All]") { dgDoctors.DataSource = dsDoctors1; } else { DataView dvDocs = new DataView(dsDoctors1.Tables[0]); dvDocs.RowFilter = "city = '" + strCity + "'"; dgDoctors.DataSource = dvDocs; } dgDoctors.DataBind(); }

6. Generar y examinar la pgina doctors.aspx. Probar seleccionando una ciudad y, a continuacin, un nmero de pgina.

Vous aimerez peut-être aussi