Anda di halaman 1dari 40

ADO .

NET
Instituto Superior Tecnolgico Pblico
Francisco de Paula Gonzles Vigil
Carrera Profesional de Computacin e Informtica
TALLER DE DESARROLLO
SOFTWARE
Jos Luis Ponce Segura
jlponcesg@hotmail.com
www.sitelperu.net
Introduccin
Es parte fundamental de NET Framework.
Es un modelo de objetos desarrollado por Microsoft.
Provee servicios de acceso a datos para mltiples fuentes de datos.
Bases de datos relacionales (RDBMS)
XML
Archivos Excel, Access, etc
Provee componentes para crear aplicaciones web y distribuidas sobre
diversas fuentes de datos.
Se accede mediante el namespace System.Data.
Provee escenarios conectados y desconectados.
Es la evolucin de Microsoft ADO (Activex Data Objects).
Provee una serie de interfaces y clases abstractas para
implementaciones de terceros. (API Independendiente)
Componentes de ADO .Net
Proveedores de datos
Se utilizan para conectarse a la base de datos, recuperar informacin y
ejecutar rdenes contra la misma.
Dependientes del gestor de datos utilizado.
Proveedor de datos para SQL Server.
Proveedor de datos para OleDB.
Utiliza los controladores nativos OleDB para Windows.
Precisan de una capa adicional entre . NET y la base de datos.
Proveedor de datos para Oracle (a partir de .NET Framework 1.1).
Arquitectura de ADO .NET
(2 componentes fundamentales)
LOS NET FRAMEWORK DATA PROVIDERS
Son un conjunto de objetos (Connection,
Command, DataReader, DataAdapter).
Permiten la conexin a la fuente de datos.
Permiten obtener, modificar datos.
Pueden ejecutar Stored Procedures y
enviar/recibir parmetros
EL DATASET
Son representaciones en memoria de los datos.
Independiente de la fuente de datos.
Puede utilizar mltiples fuentes de datos.
Proporciona un conjunto de objetos (DataTables,
DataRow, etc.)
Utilizan XML para su persistencia.
Diseado para escenarios desconectados
Modelo de objetos ADO.Net
Objeto Connection
Establece la conexin con la base de datos mediante
una cadena de conexin.
Objeto Command
Ejecuta una accin contra el almacn de datos, ya
sea de consulta o de accin.
Objeto DataReader
Conjunto de registros recuperado a partir del objeto
Command.
Objeto DataAdapter
Puente entre la conexin y los datos almacenados
en un DataSet.
Permite cargar los datos en el DataSet a partir de un
origen de datos y actualizarlos.
Modelo de objetos ADO.Net
Objeto DataSet.
Objeto abstracto: desligado
de cualquier gestor de bases de
datos.
Conjunto de tablas obtenidas
mediante el mtodo Fill del
objeto DataAdapter.
Se puede considerar como una
base de datos almacenada en la
memoria cach del cliente.
Las tablas se cargan en la
memoria cach del cliente,
dejando disponible la
conexin con el origen de
datos para otros usuarios.
Espacios de nombres para ADO .NET
Las clases de acceso a datos de .NET Framework estn en el espacio de nombres
System.Data.
Incluye las clases que no pertenecen a ningn proveedor especfico.
Los nombres de las clases pertenecientes al proveedor de datos .NET son nombres
genricos.
Existen clases distintas para cada sistema de gestin de bases de datos ubicadas
en su propio espacio de nombres:
System.Data.OleDb. (OleDbConnection, OleDbCommand,
OleDbDataReader y OleDbDataAdapter.

System.Data.SqlClient. (SqlConnection, SqlCommand, SqlDataReader
y SqlDataAdapter.

System.Data.Odbc. (OdbcConnection, OdbcCommand,
OdbcDataReader y OdbcDataAdapter.

System.Data.OracleClient. (OracleConnection, OracleCommand,
OracleDataReader y OracleDataAdapter.
Modo Conectado
Vnculo con la BD
Inicia transacciones
Tipos
OdbcConnection
SqlConnection
OleDbConnection
OracleConnection
Aplicacin
conexin
Conexin: Objeto Connection
Aplicacin
Modo Conectado
Envo de sentencias Transact-SQL
Parmetros
Puede devolver
Nmero de filas afectadas
Un valor escalar
Un lector de datos
Tipos
OdbcCommand
SqlCommand
OleDbCommand
OracleCommand
conexin
comando
Comando: Objeto Command
datos datos datos
Modo Conectado
Lectura secuencial de datos
Por fila
Por bytes
Slo lectura
Mximo rendimiento
nica funcionalidad
Foward-only
Puede manejar varios conjuntos de
resultados
Tipos
OdbcDataReader
SqlDataReader
OleDbDataReader
OracleDataReader
conexin
Aplicacin
lector comando
Lector de datos: Objeto DataReader
Resumen: Modo Conectado
Utiliza los objetos Connection, Command y DataReader.
Se establece una conexin permanente con el origen de datos.
A partir de una conexin, el objeto Command generar un objeto
DataReader con la informacin necesaria.
Los datos del objeto DataReader son de slo lectura.
El objeto Command, tambin se encargar de realizar las
operaciones de actualizacin con la base de datos.
La informacin entre el cliente y el servidor se establece en un
formato binario propietario del gestor de base de datos.
Se utiliza cuando se deben procesar los registros en un corto
espacio de tiempo:
Realizacin de informes.
Pginas dinmicas ASP de Internet.
Aplicacin
data
table
Modo Desconectado
Contenedor de datos
Cualquier orgen de datos
Independiente de este
Contiene objetos tabla
Contienen objetos fila y columna
Integridad de los datos
Restricciones
Tipos
System.Data.DataSet
System.Data.DataTable
System.Data.DataView
data
table
data
table
Conjunto de datos: Objeto DataSet
XML ...
unique
foreign key
data set
Aplicacin
cambios
datos
Modo Desconectado
Orquestador del acceso a datos
Creado para trabajar con un
DataSet
Contiene un comando de seleccin
y un lector de datos
Contiene 3 comandos para
persistir cambios en la BD
Tipos
OdbcDataAdapter
OledbDataAdapter
SqlDataAdapter
OracleDataAdapter
conexin
Adaptador de datos: Objeto DataAdapter
select
delete
update
insert
lector
data adapter
data
set
Resumen: Modo Desconectado
La conexin slo es necesario establecerla cuando se descarga informacin del origen de
datos.
Cada tabla del DataSet precisa de un objeto DataAdapter.
El mtodo Fill se encargar de cargar una tabla en el DataSet.
Los datos se almacenan en la memoria cach del cliente en un objeto DataSet.
Los datos almacenados en el DataSet se pueden modificar.
Las modificaciones efectuadas en el DataSet se pueden sincronizar con el origen de datos.
El mtodo Update del objeto DataAdapter permite actualizar el origen de datos.
La informacin entre el cliente y el servidor se transmite en forma de datos XML (pueden ser
utilizados por otra aplicacin).
Se utiliza cuando:
Se necesita modificar los datos frecuentemente.
Es necesario que los datos estn mucho tiempo en memoria (por ejemplo en
aplicaciones Windows Form).
Cuando no siempre es posible estar conectado al origen de datos (aplicaciones
mviles).
Conexin a la base de datos
Imprescindible tanto en modo conectado como
desconectado.
Pasos para crear una conexin:
Crear una instancia de algunas de las clases
Connection.
Establecer la cadena de conexin mediante la
propiedad ConnectionString.
Abrir la conexin.
En modo conectado la conexin permanecer
abierta hasta que termine la aplicacin.
En modo desconectado se cargarn los datos en
un objeto DataSet y se cerrar la conexin.
Crear una instancia de las clases.
Para el proveedor de datos SQL.
Dim cnSQL As New SqlConnection
Para el proveedor de datos OleDb.
Dim cnOleDb as New OleDbConnection
Notas:
Los nombres de las instancias sern cnSQL y cnOleDb
respectivamente.
Es necesario tener establecido el espacio de nombres o
bien utilizar el nombre cualificado
(System.Data.SqlClient.SqlConnection).
Dependiendo del alcance que queramos dar a las
variables utilizaremos los modificadores Dim, Private,
Public, etc.
Conexin a la base de datos
Cadena de conexin.
Todas las clases Connection de todos los proveedores tienen la
propiedad ConnectionString.
El valor de la propiedad ser una expresin de cadena
formada por parejas de nombres de argumentos y valores,
separados por un punto y coma.
SQL.ConnectionString ="Server=(local); Database=ventas; User ID=Ponce; pwd=12345"
Argumentos para una conexin para el proveedor de SQL Server.
Conexin a la base de datos
Nombre del servidor de base de datos.
Nombre de la base de datos a la que se va a conectar
Si se pone a false se debe especificar el nombre de usuario y la contrasea; si
se pone a true se utilizarn las credenciales de la cuenta de Windows. Los
valores permitidos son true, false, yes, no y sspi (recomendada, equivalente a
true)
Si se pone a false (recomendado) la informacin de seguridad no se devuelve
como parte de la conexin.
Nombre de usuario de una cuenta registrada en SQL Server
Contrasea de inicio de sesin para una cuenta de SQL Server
Data Source o Server
Inicial Catalog o Database
Integrated Security
Persist Security Info
User ID
Pwd
Que empiece la accin:
Modo Conectado
DataReader
Command
.NET
Recuperar filas.
Se realiza con el mtodo ExecuteReader de la clase Command.
Command es una clase del proveedor de datos, por lo que es preciso elegir la subclase adecuada
(OledDBCommand, SQLCommand, ODBCCommand u OracleCommand).
En el constructor se pasara la sentencia SQL de recuperacin (sentencia SELECT) necesaria para
recuperar filas.
ExecuteReader devuelve un objeto de la clase DataReader.
Tambin es una clase del proveedor de datos.
Representa el conjunto de filas recuperados por la SELECT.
Es slo de lectura y slo se puede ir a la siguiente fila
Trabajar en modo conectado
Cadena de conexin para el proveedor SQLServer
Dim cnSQL As New SqlConnection
cnSQL.ConnectionString ="Server=(local);Database=ventas;U ser ID=Ponce;pwd=12345"
cnSQL.Open()
Crear una orden de recuperacin
Dim miOrden As SqlCommand =New SqlCommand("SELECT * FROM Cargo", cnSQL)
Crear el DataReader
Dim drCargo As SqlDataReader
Ejecutar la consulta
drCargo = miOrden.ExecuteReader
Acceder a las filas recuperadas.
El mtodo Read carga en el objeto DataReader la siguiente fila.
Devuelve false si no hay ms filas.
Los mtodos Getxxx, permiten acceder al contenidos de las columnas.
Hay un mtodo Getxxx por cada tipo de datos.
Utiliza como argumento el nmero de columna al que se accede.
Trabajar en modo conectado
Acceder a las filas recuperadas
Limpiamos antes el listbox
ListBox1.Items.Clear()
Do While drCargo.Read
ListBox1.Items.Add(drCargo("codcar") & "- " & drCargo("descar"))
Loop
drCargo.Close()
Ejecutar funciones agregadas.
El mtodo ExecuteScalar de la clase Command devuelve slo la primera columna de una
sentencia SELECT.
Trabajar en modo conectado
Obtener el nmero total de registros de la tabla Cargo
miOrden = New SqlCommand("SELECT COUNT(*) FROM Cargo", cnSQL)
Label1.Text = "Nmero de filas: " & miOrden.ExecuteScalar
Ejecutar ordenes SQL de actualizacin.
Se utiliza el mtodo ExecuteNonQuery de la clase Command.
Se ejecuta la sentencia SQL con la que se cree el objeto Command.
Modificar la Nombre del cargo con cdigo 00003
miOrden=New SqlCommand("UPDATE Cargo SET DESCAR='Super Cajero' WHERE CodCar=00003", cnSQL)
miOrden.ExecuteNonQuery()
Aadir el cargo con Codcar 00007
miOrden = New SqlCommand("INSERT INTO Cargo (CodCar,DesCar)" & _
"VALUES ('00007','Relacionaista publico')", cnSQL)
miOrden.ExecuteNonQuery()
Eliminar el cargo con cdigo 00007
miOrden = New SqlCommand("DELETE FROM Cargo WHERE CodCar=00007", cnSQL)
miOrden.ExecuteNonQuery()
Ahora veamos el
Modo Desconectado
DataSet
DataAdapter
.NET
Select Insert
Update
Delete
DataTable
DataRow
DataColumn

En modo desconectado los adaptadores de datos se utilizan para relacionar una
conexin con un conjunto de datos.
Adapta los datos del formato nativo del gestor de bases de datos para que
puedan ser utilizados en el DataSet (XML).
Carga las diferentes tablas en el DataSet.
Actualiza las modificaciones del DataSet en el origen de datos.
Normalmente se utilizar un adaptador de datos por cada tabla que
queramos recuperar del origen de datos.
Crear la instancia del adaptador de datos.
Constructor.
Dim nombreAdaptador As xxxDataAdapter
nombreAdaptador = New xxxDataAdapter(selectSQL, conexin)
xxxDataAdapter es alguna de las clases SqlDataAdapter, OleDbDataAdapter,
OdbcDataAdapter y OracleDataAdapter.
selectSQL es una cadena con la instruccin SQL que recuperar los datos de
la tabla que se aadir al DataSet.
conexin es un objeto Connection ya abierto.
Modo Desconectado Adaptadores de datos
Rellenar el conjunto de datos
El adaptador de datos permite cargar las tablas recuperadas a partir de la sentencia SQL
en objetos de tipo DataTable del conjunto de datos.
El mtodo Fill permite realizar la carga de datos.
objetoDataAdapter.Fill(objetoDataSet,nombreObjetoDataTable)
Precisa la existencia de un objeto de la clase DataSet.
nombreObjetoDataTable es una expresin de cadena que identificar la tabla
dentro del conjunto de datos.
Los datos que se cargarn en la tabla sern los que se recuperen mediante la
orden SQL del constructor del adaptador de datos.
Adaptadores de datos
Se conecta a una base de datos Access y carga en el conjunto de datos las tablas Clientes y
Pedidos.
Conexiones, Adaptadores y conjunto de datos
Establece los espacios de nombre
Imports System.Data
Imports System.Data.Oledb
...
Declaracin de variables. Dependiendo de su alcance pueden llevar otros modificadores
Dim daEmpleado As OledbDataAdapter
Dim daCargo As OledbDataAdapter
Dim ds As New DataSet
Abrimos la conexin
cnSQL.Open()
' Crear los adaptadores de datos
daEmpleado = New OledbDataAdapter("SELECT * FROM Empleado", cnSQL)
daCargo = New OledbDataAdapter("SELECT * FROM Cargo", cnSQL)
' Rellenar el Dataset
daEmpleado.Fill(ds, "Empleado")
daCargo.Fill(ds, "Cargo")
' Una vez cargado el Dataset se puede cerrar la conexin
cnSQL.Close()
Establece los espacios de nombre
Imports System.Data
Imports System.Data.SqlClient
...
Declaracin de variables. Dependiendo de su alcance pueden llevar otros modificadores
Dim daEmpleado As SqlDataAdapter
Dim daCargo As SqlDataAdapter
Dim ds As New DataSet
Abrimos la conexin
cnSQL.Open()
' Crear los adaptadores de datos
daEmpleado = New SqlDataAdapter("SELECT * FROM Empleado", cnSQL)
daCargo = New SqlDataAdapter("SELECT * FROM Cargo", cnSQL)
' Rellenar el Dataset
daEmpleado.Fill(ds, "Empleado")
daCargo.Fill(ds, "Cargo")
' Una vez cargado el Dataset se puede cerrar la conexin
cnSQL.Close()
Ahora veamos el mismo ejemplo para SQL SERVER
Almacena en la memoria
cach del cliente los
resultados de la consulta SQL
establecida en un adaptador
de datos.
Los datos estn disponibles
en modo desconectado.
Forman una pequea base de
datos con la informacin
necesaria para la aplicacin.

La clase Dataset
El DataSet
DataSet
OledbDataAdapter
Fill
Base de
Datos
Access
OledbDataReader OledbCommand
OlebConnection SqlConnection
Base de
Datos
SqlServer
SqlDataAdapter
SqlCommand SqlDataReader
La coleccin Tables.
Cada tabla aadida por el mtodo Fill del adaptador de datos
formar un objeto de tipo DataTable.
La propiedad Tables de la clase DataSet permite acceder al
conjunto de objetos DataTable cargados.
Se puede hacer referencia a cada una de las tablas indicando
el ndice de la misma o mediante el nombre.
Para hacer referencia a la primera tabla cargada
(Clientes)
ds.Tables(0)
Para hacer referencia a
la tabla Pedidos
ds.Tables("Pedidos")
La clase Dataset
El DataSet
DataSet
DataTable
DataTable
DataTable
DataRelation
DataRelation
DataColumn
DataRow
Propiedad Columns
Coleccin de tipo
DataColumnCollection
Define el esquema de la
tabla
Propiedad Rows
Coleccin de tipo
DataRowCollection
Una vez definido el
esquema podemos hacer:
dt.Rows.Add( <Lista>)

dt.Rows.Add( unaRow )


Se conecta a una base de datos Access y carga en el conjunto de datos las
tablas Clientes y Pedidos.
La clase Dataset
Ejemplo: obtener las tablas contenidas en el Dataset
For Each dt As DataTable In ds.Tables
lstTablas.Items.Add(dt.TableName)
Next
lblTablas.Text = "Nmero de tablas: " & CStr(ds.Tables.Count)
Cada tabla (objeto DataTable) est formada por:
Una coleccin de columnas (coleccin de objetos
DataColumn).
La propiedad Columns permite acceder a cada una de
las columnas.
Cada columna guarda informacin de las
caractersticas de cada uno de los campos (tipo de
dato, longitud, etc.).
Es posible acceder a ellas mediante el ndice o
mediante el nombre de la columna.
La clase DataTable
Obtener las columnas de la tabla Empleado
lstColumnas.Items.Add("Indice - Campo")
For i As Integer = 0 To ds.Tables(0).Columns.Count - 1
lstColumnas.Items.Add(CStr(i) & " - " & ds.Tables(0).Columns(i).ColumnName)
Next
lblcolumnas.Text = "Nmero de Columnas: " & CStr(ds.Tables(0).Columns.Count)
Una coleccin de filas (coleccin de objetos DataRow).
La propiedad Rows permite acceder a cada una de las filas.
Cada fila de la coleccin Rows est identificada por su ndice (posicin de la fila dentro
de la coleccin).
Es posible acceder a ellas de forma similar a un array.
El valor de cada campo est disponible mediante la coleccin Item del objeto DataRow.
Accedemos a cada campo por su ndice o por el nombre del campo.
Obtener la informacin de todas las filas de una tabla.
La clase DataTable
La clase DataTable
Listado de la tabla Empelado
lstDatosTabla.Items.Clear() ' Primero limpiaremos cuadro de lista
lstDatosTabla.Items.Add("Cdigo | Apellidos | Nombres | Direccin | Telefono") ' Solo de referencia
For i As Integer = 0 To ds.Tables(0).Rows.Count - 1
lstDatosTabla.Items.Add(ds.Tables(0).Rows(i).Item("CodEmp") & " | " & _
ds.Tables(0).Rows(i).Item("Apeemp") & " | " & _
ds.Tables(0).Rows(i).Item("Nomemp") & " | " & _
ds.Tables(0).Rows(i).Item("DirEmp") & " | " & _
ds.Tables(0).Rows(i).Item("telemp")) '& ")"
Next

' Listado de la tabla Cargo
lstDatosCargo.Items.Clear() ' Primero limpiaremos cuadro de lista
lstDatosCargo.Items.Add("Cdigo | Descripcin") Solo de referencia
For Each dr As DataRow In ds.Tables(1).Rows
lstDatosCargo.Items.Add(dr.Item("CodCar") & " - " & dr.Item("DesCar"))
Next
Capa intermedia que se sita entre la tabla.
Proporciona una vista filtrada y ordenada de las filas de la
tabla.
Los datos de la tabla no vara, slo cambia el filtro y la
ordenacin de las filas.
Por su versatilidad se suele utilizar en aplicaciones que
necesiten un enlace a datos.
Permite crear distintas vistas de una DataTable.
Por ejemplo
Puede servir para mostrar los datos de una tabla con
distintos criterios de ordenacin.
Pueden enlazarse a controles distintos de una
aplicacin para mostrar en una rejilla todas filas y en
otra las filas eliminadas.
Presenta una vista dinmica de la tabla a la que est asociado.
Las modificaciones que se efecten en el DataView
pueden tener efecto en la tabla.
Es similar al concepto de vista de una base de datos, pero
No puede excluir ni aadir columnas de la tabla a la que
est asociado
No puede proporcionar vistas de tablas combinadas.
La clase DataView
Construir un objeto DataView.
A partir de la propiedad DefaultView de la clase DataTable.
Dim dv As DataView = ds.Tables(Clientes).DefaultView
Proporciona una vista de todas las filas de la tabla Clientes a con
su ordenacin original.
Mediante el contructor de la clase DataView.
DataView(dataTable, expresinFiltro, expresinSort,
dataViewRowState)
expresinFiltro es una cadena con el criterio de seleccin en el
mismo formato que en el mtodo Select de la clase DataTable.
expresinSort es una cadena con la expresin de ordenacin en el
mismo formato que el mtodo Select de la clase DataTable.
dataViewRowState es un miembro de la enumeracin
DataViewRowState que indica el estado de las filas que se
seleccionarn ( ver diapositiva siguiente).
La clase DataView
Filtrar y ordenar filas.
La propiedad RowFilter de la clase DataView permite filtrar los registros de la vista.
El valor de la propiedad sera una cadena con la expresin de filtro ( igual que el
mtodo Select de la clase DataTable).
La propiedad Sort permite ordenar las filas de la vista.
El valor de la propiedad sera una cadena con la expresin de ordenacin (igual que
el mtodo Select de la clase DataTable).
La propiedad RowStateFilter es un miembro de la enumeracin DataViewRowState que
establece el filtro sobre el estado de la fila.
La clase DataView
Acceso a las filas de la vista.
El objeto DataView proporciona una coleccin objetos DataRow accesible mediante la
propiedad Item.
Podemos acceder a ellas a partir del ndice de cada elemento de la propiedad Item.
dv.Item(0).Item("IdCliente")
Proporciona el identificador de cliente de la primera fila (fila 0) de la vista de
datos.
La clase DataView
Filtrar los registros de la provincia de Madrid ordenados por Ciudad
dim dv as DataView = ds.Tables("Clientes").DefaultView
dv.RowFilter ="Provincia='Madrid'"
dv.Sort ="Ciudad"
For i As Integer = 0 To dv.Count 1
System.Console.WriteLine(dv.Item(i).item("IdCliente") & & _
dv.Item(i).item("Apellido") & & _
dv.Item(i).item("Nombre") & & _
dv.Item(i).item("Ciudad") & & _
dv.Item(i).item("Provincia"))
Next
La clase DataRelation
Permiten acceder a los datos de una tabla secundaria a partir de un campo clave de
una tabla primaria.
Tambin permiten restringir la manipulacin de datos y exigir la integridad
referencial de los datos.
La clase DataRelation permite aadir relaciones entre las tablas de un DataSet.
Las relaciones de un DataSet son accesibles a partir de su coleccin Relations.
Creacin de una relacin.
Crear una nueva instancia de la clase DataRelation.
New DataRelation(nombreRelacin,columnaPadre, columnaHija)
columnaPadre y columnaHija son dos objetos DataColumn de las tablas
primaria y secundaria.
Aadirla a la coleccin Relations del DataSet.
objetoDataSet.Relations.Add(nombreRelacin)
Saludos,
Datos para contacto:
Jos Luis Ponce Segura
Tacna Per
Fono: 052 952636911
RPM *518333
www.sitelperu.net
www.redtacna.net

Anda mungkin juga menyukai