Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Practica A
Practica A
NET
Logon Logon Page Page
Login.aspx Login.aspx Coho Winery
Registration Registration
Register.aspx Register.aspx
ASPState
Web. config
tempdb
Retirement Retirement
Retirement.aspx Retirement.aspx
Medical Medical
Medical.aspx Medical.aspx
Dental Dental
Dental.aspx Dental.aspx
Prospectus Prospectus
Prospectus.aspx Prospectus.aspx
Doctors Doctors
Doctors.aspx Doctors.aspx
dentalService1.asmx dentalService1.asmx
XML Files
Doctors
Dentists
Objetivos
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.
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.
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.
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;
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.
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.