Вы находитесь на странице: 1из 31

Acceso a datos con

Microsoft ADO.NET

Descripcin

Introduccin a ADO.NET

Conectar a una base de datos

Acceder a datos con DataSets

Utilizar mltiples tablas

Acceder a datos con DataReaders

Leccin: introduccin al uso de ADO.NET

Multimedia: modelo de objetos ADO.NET

Utilizar DataSets frente a DataReaders

Prctica: cundo utilizar DataSets o DataReaders

Uso de DataSets frente a DataReaders


DataSet

DataReader

Acceso lectura/escritura a datos

Slo lectura

Incluye mltiples tablas de


distintas bases de datos

Basado en una instruccin SQL


de una base de datos

Desconectado

Conectado

Vinculado a mltiples controles

Vinculado a un nico control

Bsqueda de datos hacia delante


y hacia atrs

Slo hacia delante

Acceso ms lento

Acceso ms rpido

Soportado por las herramientas


de Visual Studio .NET

Codificacin manual

Prctica: cundo utilizar DataSets o DataReaders

Los estudiantes:

Seleccionarn la mejor opcin de acceso a


datos para determinados escenarios

Tiempo: 5 minutos

Leccin: conexin a una base de datos

Seguridad SQL Server

Crear la conexin

Demostracin: establecer la seguridad SQL Server

Seguridad SQL Server


Servidor
ServidorWeb
Web
Configuracin
ConfiguracinASP.NET
ASP.NET
predeterminada
predeterminada
Aqu est el
nombre de usuario
y la contrasea

Autenticacin
Autenticacin
modo
modomixto
mixto

o
o
Cliente

Autenticacin
Autenticacin
slo
sloWindows
Windows
Servidor
ServidorWeb
Web
Autenticacin
AutenticacinWindows
Windows

Enviar el nombre de
usuario y contrasea
en texto claro.
Servidor
ServidorSQL
SQL
Cada
Cadacuenta
cuentade
deusuario
usuariose
se
agrega
agregaaagrupo
grupologin
loginde
deSQL
SQLServer
Server
No enviar el nombre de
usuario y contrasea.
Enviar slo que el
usuario ha sido
autenticado.
Servidor
ServidorSQL
SQL
Slo
Slolalacuenta
cuentaASPNET
ASPNET
tiene
tieneconcedido
concedidoacceso
acceso

Crear la conexin

Uso de SqlConnection
Dim
Dim strConn
strConn As
As String
String == "data
"data source=localhost;
source=localhost; "" && __
"initial
"initial catalog=northwind;
catalog=northwind; integrated
integrated security=true"
security=true"
Dim
conn
As
New
SqlConnection(strConn)
Dim conn As New SqlConnection(strConn)

string
string strConn
strConn == "data
"data source=localhost;
source=localhost; "" ++
"initial
"initial catalog=northwind;
catalog=northwind; integrated
integrated security=true";
security=true";
SqlConnection
SqlConnection conn
conn == new
new SqlConnection(strConn);
SqlConnection(strConn);

Establecer los parmetros de la cadena de conexin

Timeout de conexin

Fuente de datos

Contrasea

Catlogo inicial

Persistir informacin seguridad

Seguridad integrada

Proveedor

ID de usuario

Demostracin: establecer la seguridad de SQL Server

Abrir SQL Server Enterprise Manager

Establecer el modo
de autenticacin

Probar con seguridad


integrada

Probar con seguridad


en modo mixto

Leccin: acceder a datos con DataSets

Crear un DataAdapter

Crear un DataSet

Demostracin: utilizar programticamente un DataSet

Utilizar un DataView

Prctica: organizar cdigo para crear un DataSet

Vincular un DataSet a un control enlazado a lista

Prctica dirigida por el instructor: visualizar un


DataSet

Gestin de errores

Crear un DataAdapter

Almacenar la consulta en un DataAdapter


Dim
Dim da
da As
As New
New SqlDataAdapter
SqlDataAdapter __
("select
("select ** from
from Authors",
Authors", conn)
conn)
SqlDataAdapter
SqlDataAdapter da
da == new
new SqlDataAdapter
SqlDataAdapter
("select
("select ** from
from Authors",conn);
Authors",conn);

El constructor DataAdapter establece la propiedad SelectCommand


da.SelectCommand.CommandText
da.SelectCommand.CommandText
da.SelectCommand.Connection
da.SelectCommand.Connection

da.SelectCommand.CommandText;
Establecer las propiedades
InsertCommand, UpdateCommand y
da.SelectCommand.CommandText;
da.SelectCommand.Connection;
DeleteCommand si fuera
necesario
da.SelectCommand.Connection;

Crear un DataSet

Crear y poblar un DataSet con DataTables

El mtodo Fill ejecuta el SelectCommand

DataSet
DataSet ds
ds == new
new DataSet();
DataSet();
da.Fill(ds,
da.Fill(ds, "Authors");
"Authors");

Dim
Dim ds
ds As
As New
New DataSet()
DataSet()
da.Fill(ds,
da.Fill(ds, "Authors")
"Authors")

Acceder a DataTable

ds.Tables["Authors"].Rows.Count;
ds.Tables["Authors"].Rows.Count;
string
string str="";
str="";
foreach(DataRow
foreach(DataRow rr in
in
ds.Tables["Authors"].Rows)
ds.Tables["Authors"].Rows)
{{
str
str +=
+= r[2];
r[2];
str
+=
r["au_lname"];
str += r["au_lname"];
}}

ds.Tables("Authors").Rows.Count
ds.Tables("Authors").Rows.Count
Dim
Dim rr As
As DataRow
DataRow
Dim
str
As
Dim str As String
String
For
Each
r
in
For Each r in __
ds.Tables("Authors").Rows
ds.Tables("Authors").Rows
str
str &=
&= r(2)
r(2)
str
str &=
&= r("au_lname")
r("au_lname")
Next
Next

Demostracin: utilizar programticamente un DataSet

Crear una conexin

Crear DataAdapter

Crear DataSet

Leer los datos del DataSet


programticamente

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
Dim
Dim dv
dv As
As DataView
DataView == ds.Tables("Authors").DefaultView
ds.Tables("Authors").DefaultView
DataView
DataView dv
dv == ds.Tables["Authors"].DefaultView;
ds.Tables["Authors"].DefaultView;

Establecer una vista distinta de un DataSet


Dim
Dim dv
dv As
As New
New DataView
DataView (ds.Tables("Authors"))
(ds.Tables("Authors"))
dv.RowFilter
=
"state
=
dv.RowFilter = "state = 'CA'"
'CA'"
DataView
DataView dv
dv == new
new DataView(ds.Tables["Authors"]);
DataView(ds.Tables["Authors"]);
dv.RowFilter
=
"state
dv.RowFilter = "state == 'CA'";
'CA'";

Prctica: organizar cdigo para crear un DataSet

Los estudiantes:

Reordenarn lneas de cdigo para crear


un DataSet

Tiempo: 5 minutos

Vincular un DataSet a un control enlazado a lista

Crear el control
<asp:DataGrid
<asp:DataGrid id="dg"
id="dg" runat="server"
runat="server" />
/>

Vincular a un DataSet o un DataView


dg.DataSource
dg.DataSource == ds
ds
dg.DataMember
=
"Authors"
dg.DataMember = "Authors"
dg.DataBind()
dg.DataBind()

dg.DataSource
dg.DataSource == ds;
ds;
dg.DataMember
=
"Authors";
dg.DataMember = "Authors";
dg.DataBind()
dg.DataBind();;

Prctica dirigida por el instructor: mostrar un DataSet

Crear una conexin

Crear un DataAdapter

Crear un DataSet

Crear un DataView

Vincular DataSet y DataView a controles


DataGrid

Gestin de errores

La conexin no se abre

La cadena de conexin no es vlida

El servidor o la base de datos no se encuentran

Fallo de inicio de sesin

El DataAdapter no puede crear un DataSet

Sintaxis SQL no vlida

Nombre de tabla o campo no vlido

Cdigo de ejemplo

Leccin: utilizar mltiples tablas

Almacenar mltiples tablas

Crear relaciones

Navegar programticamente entre tablas utilizando


relaciones

Navegar visualmente entre tablas utilizando


relaciones

Prctica dirigida por el instructor: mostrar datos de


mltiples tablas

Almacenar mltiples tablas

Agregar la primera tabla


daCustomers
daCustomers == New
New SqlDataAdapter
SqlDataAdapter __
("select
("select ** from
from Customers",
Customers", conn1)
conn1)
daCustomers.Fill(ds,
daCustomers.Fill(ds, "Customers")
"Customers")

Agregar la(s) siguiente(s) tabla(s)


daOrders
daOrders == New
New SqlDataAdapter
SqlDataAdapter __
("select
("select ** from
from Orders",
Orders", conn2)
conn2)
daOrders.Fill(ds,
daOrders.Fill(ds, "Orders")
"Orders")
Customers

conn1

conn2
DataSet

Orders

Crear relaciones

Identificar la columna primaria

Dim
Dim parentCol
parentCol As
As DataColumn
DataColumn == __
ds.Tables("Customers").Columns("CustomerID")
ds.Tables("Customers").Columns("CustomerID")

Identificar la columna secundaria

Dim
Dim childCol
childCol As
As DataColumn
DataColumn == __
ds.Tables("Orders").Columns("CustomerID")
ds.Tables("Orders").Columns("CustomerID")

Crear DataRelation

parentCol

Dim
Dim dr
dr As
As New
New DataRelation
DataRelation __
("name",
("name", parentCol,
parentCol, __
childCol)
childCol)
ds.DataRelations.Add(dr)
ds.DataRelations.Add(dr)

Cdigo de ejemplo C#

Tabla Customers

DataSet

DataRelation

childCol
Tabla Orders

Navegar programticamente entre tablas utilizando relaciones

ds.Tables(index).Rows(index).GetChildRows("relation")
ds.Tables(index).Rows(index).GetChildRows("relation")
ds.Tables(index).Rows(index).GetParentRow("relation")
ds.Tables(index).Rows(index).GetParentRow("relation")
ds.Tables[index].Rows[index].GetChildRows("relation");
ds.Tables[index].Rows[index].GetChildRows("relation");
ds.Tables[index].Rows[index].GetParentRow("relation");
ds.Tables[index].Rows[index].GetParentRow("relation");

Orders

Customers
GetChildRows

DataSet

GetParentRow

Navegar visualmente entre tablas utilizando relaciones


Dim
Dim tableView
tableView As
As DataView
DataView
Dim
currentRowView
Dim currentRowView As
As DataRowView
DataRowView
tableView
tableView == New
New DataView(ds.Tables("Customers"))
DataView(ds.Tables("Customers"))
currentRowView
=
currentRowView = tableView(dgCustomers.SelectedIndex)
tableView(dgCustomers.SelectedIndex)
dgChild.DataSource
dgChild.DataSource == currentRowView.CreateChildView("CustOrders")
currentRowView.CreateChildView("CustOrders")
DataView
DataView tableView;
tableView;
DataRowView
DataRowView currentRowView;
currentRowView;
tableView
tableView == new
new DataView(ds.Tables["Customers"]);
DataView(ds.Tables["Customers"]);
currentRowView
currentRowView == tableView[dgCustomers.SelectedIndex];
tableView[dgCustomers.SelectedIndex];
dgChild.DataSource
dgChild.DataSource == currentRowView.CreateChildView("CustOrders");
currentRowView.CreateChildView("CustOrders");
Customers

DataView

DataRowView

CreateChildView

DataSet

Orders

Prctica dirigida por el instructor: mostrar datos de mltiples tablas

Programticamente:

Crear un DataSet

Crear un DataRelation

Mostrar registros secundarios utilizando


DataRelation

Visualmente:

Invocar CreateChildView

Leccin: 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

Prctica: organizar cdigo para crear un DataReader

Demostracin: mostrar datos utilizando DataReaders

Qu es un DataReader?

Slo hacia delante, slo lectura

Acceso rpido a datos

Conexin a una fuente de datos

Gestin de la conexin por s mismo

Gestin de los datos por s mismo, o vincularlos a un


control enlazado a lista

Utiliza menos recursos del servidor

Crear un DataReader

Para utilizar un DataReader:


1.1

Crear y abrir la conexin a la base de datos

2.2

Crear un objeto Command

3.3

Crear un DataReader desde el objeto Command

4.4

44

Invocar el mtodo ExecuteReader

55

Utilizar el objeto DataReader

5.5

66

6.

77

7.

Cerrar el objeto DataReader


Cerrar el objeto Connection

Utilizar el controlador de errores TryCatchFinally

Cdigo de ejemplo

Leer datos de un DataReader

Invocar Read para cada registro

Devuelve false cuando no hay ms registros

Acceso a campos
Parmetro es la posicin ordinal o nombre del campo
Las funciones Get ofrecen un mejor rendimiento

Do
Do While
While myReader.Read()
myReader.Read()
str
&=
str &= myReader(1)
myReader(1)
str
str &=
&= myReader("field")
myReader("field")
str
&=
myReader.GetDateTime(2)
str &= myReader.GetDateTime(2)
Loop
Loop

Cerrar el DataReader

Cerrar la conexin

while
while (myReader.Read())
(myReader.Read())
{{
str
str +=
+= myReader[1];
myReader[1];
str
+=
myReader["field"];
str += myReader["field"];
str
str +=
+= myReader.GetDateTime(2);
myReader.GetDateTime(2);
}}

Vincular un DataReader a un control enlazado a lista

Crear el control

<asp:DataGrid
<asp:DataGrid id="dgAuthors"
id="dgAuthors" runat="server"
runat="server" />
/>

Vincular a un DataReader

dgAuthors.DataSource
dgAuthors.DataSource == dr
dr
dgAuthors.DataBind()
dgAuthors.DataBind()

dgAuthors.DataSource
dgAuthors.DataSource == dr;
dr;
dgAuthors.DataBind();
dgAuthors.DataBind();

Prctica: organizar cdigo para crear un DataReader

Los estudiantes:

Reordenarn lneas de cdigo para crear


un DataReader

Tiempo: 5 minutos

Demostracin: 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