Post on 18-Dec-2014
description
Acceso a datos con Microsoft ADO.NET
Descripción
Introducción a ADO.NET
Conectar a una base de datos
Acceder a datos con DataSets
Utilizar múltiples tablas
Acceder a datos con DataReaders
Lección: introducción al uso de ADO.NET
Multimedia: modelo de objetos ADO.NET
Utilizar DataSets frente a DataReaders
Práctica: cuándo utilizar DataSets o DataReaders
Uso de DataSets frente a DataReaders
Soportado por las herramientas de Visual Studio .NET
Acceso más lento
Sólo hacia delante
Vinculado a un único control
Basado en una instrucción SQL de una base de datos
Sólo lectura
Codificación manual
Acceso más rápido
Búsqueda de datos hacia delante y hacia atrás
Vinculado a múltiples controles
Incluye múltiples tablas de distintas bases de datos
Acceso lectura/escritura a datos
DataReaderDataSet
Desconectado Conectado
Práctica: cuándo utilizar DataSets o DataReaders
Los estudiantes:
Seleccionarán la mejor opción de acceso a datos para determinados escenarios
Tiempo: 5 minutos
Lección: conexión a una base de datos
Seguridad SQL Server
Crear la conexión
Demostración: establecer la seguridad SQL Server
Seguridad SQL Server
ClienteCliente
Enviar el nombre de usuario y contraseña
en texto claro.
No enviar el nombre de usuario y contraseña.
Enviar sólo que el usuario ha sido
autenticado.
Autenticaciónmodo mixto
Autenticaciónmodo mixto
Autenticaciónsólo WindowsAutenticaciónsólo Windows
Servidor SQL Sólo la cuenta ASPNETtiene concedido acceso
Servidor SQL Sólo la cuenta ASPNETtiene concedido accesoServidor Web
Autenticación WindowsServidor Web
Autenticación Windows
o…o…
Servidor SQL Cada cuenta de usuario se
agrega a grupo login de SQL Server
Servidor SQL Cada cuenta de usuario se
agrega a grupo login de SQL Server
Servidor Web Configuración ASP.NET
predeterminada
Servidor Web Configuración ASP.NET
predeterminada
Aquí está el nombre de usuario
y la contraseña
Crear la conexión
Uso de SqlConnection
Establecer los parámetros de la cadena de conexión
Timeout de conexión
Fuente de datos
Catálogo inicial
Seguridad integrada
Dim strConn As String = "data source=localhost; " & _ "initial catalog=northwind; integrated security=true"Dim conn As New SqlConnection(strConn)
Dim strConn As String = "data source=localhost; " & _ "initial catalog=northwind; integrated security=true"Dim conn As New SqlConnection(strConn)
Contraseña
Persistir información seguridad
Proveedor
ID de usuario
string strConn = "data source=localhost; " + "initial catalog=northwind; integrated security=true";SqlConnection conn = new SqlConnection(strConn);
string strConn = "data source=localhost; " + "initial catalog=northwind; integrated security=true";SqlConnection conn = new SqlConnection(strConn);
Demostración: establecer la seguridad de SQL Server
Abrir SQL Server Enterprise Manager
Establecer el modo de autenticación
Probar con seguridad integrada
Probar con seguridad en modo mixto
Lección: acceder a datos con DataSets
Crear un DataAdapter
Crear un DataSet
Demostración: utilizar programáticamente un DataSet
Utilizar un DataView
Práctica: organizar código para crear un DataSet
Vincular un DataSet a un control enlazado a lista
Práctica dirigida por el instructor: visualizar un DataSet
Gestión de errores
Almacenar la consulta en un DataAdapter
El constructor DataAdapter establece la propiedad SelectCommand
Establecer las propiedades InsertCommand, UpdateCommand y DeleteCommand si fuera necesario
Crear un DataAdapter
Dim da As New SqlDataAdapter _("select * from Authors", conn)
Dim da As New SqlDataAdapter _("select * from Authors", conn)
da.SelectCommand.CommandText da.SelectCommand.Connection
da.SelectCommand.CommandText da.SelectCommand.Connection
SqlDataAdapter da = new SqlDataAdapter("select * from Authors",conn);
SqlDataAdapter da = new SqlDataAdapter("select * from Authors",conn);
da.SelectCommand.CommandText;da.SelectCommand.Connection;
da.SelectCommand.CommandText;da.SelectCommand.Connection;
Crear un DataSet
Crear y poblar un DataSet con DataTables
El método Fill ejecuta el SelectCommand
Acceder a DataTable
Dim ds As New DataSet()da.Fill(ds, "Authors")
Dim ds As New DataSet()da.Fill(ds, "Authors")
Dim r As DataRowDim str As StringFor Each r in _ ds.Tables("Authors").Rows str &= r(2) str &= r("au_lname")Next
Dim r As DataRowDim str As StringFor Each r in _ ds.Tables("Authors").Rows str &= r(2) str &= r("au_lname")Next
ds.Tables("Authors").Rows.Countds.Tables("Authors").Rows.Count
DataSet ds = new DataSet();da.Fill(ds, "Authors");
DataSet ds = new DataSet();da.Fill(ds, "Authors");
ds.Tables["Authors"].Rows.Count;ds.Tables["Authors"].Rows.Count;
string str="";
foreach(DataRow r in ds.Tables["Authors"].Rows){ str += r[2]; str += r["au_lname"];}
string str="";
foreach(DataRow r in ds.Tables["Authors"].Rows){ str += r[2]; str += r["au_lname"];}
Demostración: utilizar programáticamente un DataSet
Crear una conexión
Crear DataAdapter
Crear DataSet
Leer los datos del DataSet programáticamente
Utilizar un DataView
Un DataView puede personalizarse para presentar un subconjunto de datos de un DataTable
La propiedad DefaultView devuelve el DataView predeterminado de la tabla
Establecer una vista distinta de un DataSet
DataView dv = new DataView(ds.Tables["Authors"]);dv.RowFilter = "state = 'CA'";
DataView dv = new DataView(ds.Tables["Authors"]);dv.RowFilter = "state = 'CA'";
Dim dv As DataView = ds.Tables("Authors").DefaultView Dim dv As DataView = ds.Tables("Authors").DefaultView
Dim dv As New DataView (ds.Tables("Authors"))dv.RowFilter = "state = 'CA'"
Dim dv As New DataView (ds.Tables("Authors"))dv.RowFilter = "state = 'CA'"
DataView dv = ds.Tables["Authors"].DefaultView;DataView dv = ds.Tables["Authors"].DefaultView;
Práctica: organizar código para crear un DataSet
Los estudiantes:
Reordenarán líneas de código para crear un DataSet
Tiempo: 5 minutos
Vincular un DataSet a un control enlazado a lista
Crear el control
Vincular a un DataSet o un DataView
dg.DataSource = dsdg.DataMember = "Authors"dg.DataBind()
dg.DataSource = dsdg.DataMember = "Authors"dg.DataBind()
<asp:DataGrid id="dg" runat="server" /><asp:DataGrid id="dg" runat="server" />
dg.DataSource = ds;dg.DataMember = "Authors";dg.DataBind();
dg.DataSource = ds;dg.DataMember = "Authors";dg.DataBind();
Práctica dirigida por el instructor: mostrar un DataSet
Crear una conexión
Crear un DataAdapter
Crear un DataSet
Crear un DataView
Vincular DataSet y DataView a controles DataGrid
Gestión de errores
La conexión no se abre
La cadena de conexión no es válida
El servidor o la base de datos no se encuentran
Fallo de inicio de sesión
El DataAdapter no puede crear un DataSet
Sintaxis SQL no válida
Nombre de tabla o campo no válido
Código de ejemplo
Lección: utilizar múltiples tablas
Almacenar múltiples tablas
Crear relaciones
Navegar programáticamente entre tablas utilizando relaciones
Navegar visualmente entre tablas utilizando relaciones
Práctica dirigida por el instructor: mostrar datos de múltiples tablas
Almacenar múltiples tablas
Agregar la primera tabla
Agregar la(s) siguiente(s) tabla(s)
daCustomers = New SqlDataAdapter _ ("select * from Customers", conn1)daCustomers.Fill(ds, "Customers")
daCustomers = New SqlDataAdapter _ ("select * from Customers", conn1)daCustomers.Fill(ds, "Customers")
Orders
Customers
daOrders = New SqlDataAdapter _ ("select * from Orders", conn2)daOrders.Fill(ds, "Orders")
daOrders = New SqlDataAdapter _ ("select * from Orders", conn2)daOrders.Fill(ds, "Orders")
conn2conn1
DataSet
Crear relaciones
Identificar la columna primaria
Identificar la columna secundaria
Crear DataRelation
Dim dr As New DataRelation _ ("name", parentCol, _ childCol)ds.DataRelations.Add(dr)
Dim dr As New DataRelation _ ("name", parentCol, _ childCol)ds.DataRelations.Add(dr)
Dim parentCol As DataColumn = _ ds.Tables("Customers").Columns("CustomerID")
Dim parentCol As DataColumn = _ ds.Tables("Customers").Columns("CustomerID")
Dim childCol As DataColumn = _ ds.Tables("Orders").Columns("CustomerID")
Dim childCol As DataColumn = _ ds.Tables("Orders").Columns("CustomerID")
Tabla Orders
Tabla Customers
DataSet
parentCol
childCol
DataRelation
Código de ejemplo C#
Navegar programáticamente entre tablas utilizando relaciones
ds.Tables(index).Rows(index).GetChildRows("relation")ds.Tables(index).Rows(index).GetParentRow("relation")
ds.Tables(index).Rows(index).GetChildRows("relation")ds.Tables(index).Rows(index).GetParentRow("relation")
Customers Orders
GetChildRows
GetParentRowDataSet
ds.Tables[index].Rows[index].GetChildRows("relation");ds.Tables[index].Rows[index].GetParentRow("relation");
ds.Tables[index].Rows[index].GetChildRows("relation");ds.Tables[index].Rows[index].GetParentRow("relation");
Navegar visualmente entre tablas utilizando relaciones
Dim tableView As DataViewDim currentRowView As DataRowView
tableView = New DataView(ds.Tables("Customers"))currentRowView = tableView(dgCustomers.SelectedIndex)dgChild.DataSource = currentRowView.CreateChildView("CustOrders")
Dim tableView As DataViewDim currentRowView As DataRowView
tableView = New DataView(ds.Tables("Customers"))currentRowView = tableView(dgCustomers.SelectedIndex)dgChild.DataSource = currentRowView.CreateChildView("CustOrders")
Customers Orders
CreateChildView
DataRowView
DataView
DataSet
DataView tableView;DataRowView currentRowView;
tableView = new DataView(ds.Tables["Customers"]);currentRowView = tableView[dgCustomers.SelectedIndex];dgChild.DataSource = currentRowView.CreateChildView("CustOrders");
DataView tableView;DataRowView currentRowView;
tableView = new DataView(ds.Tables["Customers"]);currentRowView = tableView[dgCustomers.SelectedIndex];dgChild.DataSource = currentRowView.CreateChildView("CustOrders");
Práctica dirigida por el instructor: mostrar datos de múltiples tablas
Programáticamente:
Crear un DataSet
Crear un DataRelation
Mostrar registros secundarios utilizando DataRelation
Visualmente:
Invocar CreateChildView
Lección: Acceso a datos con DataReaders
¿Qué es un DataReader?
Crear un DataReader
Leer datos de un DataReader
Vincular un DataReader a un control enlazado a lista
Práctica: organizar código para crear un DataReader
Demostración: mostrar datos utilizando DataReaders
¿Qué es un DataReader?
Sólo hacia delante, sólo lectura
Acceso rápido a datos
Conexión a una fuente de datos
Gestión de la conexión por sí mismo
Gestión de los datos por sí mismo, o vincularlos a un control enlazado a lista
Utiliza menos recursos del servidor
Código de ejemplo
Crear un DataReader
Para utilizar un DataReader:
1. Crear y abrir la conexión a la base de datos
2. Crear un objeto Command
3. Crear un DataReader desde el objeto Command
4. Invocar el método ExecuteReader
5. Utilizar el objeto DataReader
6. Cerrar el objeto DataReader
7. Cerrar el objeto Connection
Utilizar el controlador de errores Try…Catch…Finally
1111
2222
3333
4444
5555
6666
7777
Leer datos de un DataReader
Invocar Read para cada registro Devuelve false cuando no hay más registros
Acceso a campos Parámetro es la posición ordinal o nombre del campo Las funciones Get ofrecen un mejor rendimiento
Cerrar el DataReader
Cerrar la conexión
Do While myReader.Read() str &= myReader(1) str &= myReader("field") str &= myReader.GetDateTime(2)Loop
Do While myReader.Read() str &= myReader(1) str &= myReader("field") str &= myReader.GetDateTime(2)Loop
while (myReader.Read()){ str += myReader[1]; str += myReader["field"]; str += myReader.GetDateTime(2);}
while (myReader.Read()){ str += myReader[1]; str += myReader["field"]; str += myReader.GetDateTime(2);}
Vincular un DataReader a un control enlazado a lista
Crear el control
Vincular a un DataReader
dgAuthors.DataSource = drdgAuthors.DataBind()
dgAuthors.DataSource = drdgAuthors.DataBind()
<asp:DataGrid id="dgAuthors" runat="server" /><asp:DataGrid id="dgAuthors" runat="server" />
dgAuthors.DataSource = dr;dgAuthors.DataBind();
dgAuthors.DataSource = dr;dgAuthors.DataBind();
Práctica: organizar código para crear un DataReader
Los estudiantes:
Reordenarán líneas de código para crear un DataReader
Tiempo: 5 minutos
Demostración: mostrar datos utilizando DataReaders
Crear un objeto SqlConnection
Crear un objeto DataReader
Vincular el DataReader a un Cuadro de lista
Generar los elementos del Cuadro de lista a partir de datos proporcionados por el DataReader