Anda di halaman 1dari 40

Consumiendo y Manipulando Datos

ADO .NET
ADO.NET es una evolucin de la arquitectura de acceso a datos
usada en el modelo de programacin Microsoft ActiveX Data
Objects (ADO). ADO.NET no reemplaza a ADO para el programador
COM; ms bien provee al programador .NET con acceso a base de
datos relacionales ,XML y data de aplicacin.
En este mdulo veremos:
El modelo de objetos de ADO.NET
Accesando datos con ADO.NET
Creacin de un DataAdapter que utiliza un sentencia SELECT
Creacin de un DataAdapter que utilice un procedimiento almacenado
Cmo llenar una tabla de un DataSet utilizando un DataAdapter?
Qu son los comandos de modificacin de datos?
XML y DataSates
Mtodos del objeto Dataset basados en XML
Sincronizacin de un DataSet con un objeto XMLDataDocument
Cmo sincronizar un DataSet con un objeto XMLDataDocument?
Manejando los errores provenientes de la Base de Datos

El modelo de objetos de
ADO.NET

Almacenamiento de datos
Existen los siguientes tipos de datos a
almacenar:
No estructurados.
Estructurados, datos no-jerrquicos.
Archivos separados por comas (CSV), Hojas de
clculo de Microsoft Excel, Archivos de Microsoft
Exchange, Archivos de Active Directory y otros.

Jerrquicos
Documentos XML.

Base de datos relacionales.


SQL Server, Oracle, Access entre otros.

Qu es un entorno conectado?
Un entorno conectado es aquel en el que los
usuarios mantienen una conexin permanente a la
BD.
Ventajas:
Facilita el control de seguridad.
Es sencillo controlar la concurrencia.
Desventajas:
Debe mantener una conexin permanente a la
red.
Escalabilidad.

Qu es un entorno desconectado?
En un entorno desconectado, un conjunto de datos
del servidor puede ser copiado y modificado
independientemente.
Ventajas
Puede trabajar todo el tiempo que se considere
conveniente.
Otros usuarios pueden emplear la conexin
Mejora la escalabilidad y performance de las
aplicaciones.

Desventajas
Los datos no siempre estan actualizados.
Los conflictos en actualizaciones pueden ocurrir y deben
ser resueltos.

Namespace System.Data
El namespace System.Data constituye el corazn del acceso a datos del
Framework de .NET. Aqu se muestran algunas de las clases ms utilizadas
para el acceso y la manipulacin de informacin desde una base de datos SQL
Server:
Clase

Descripcin

SqlConnection

Encapsula una conexin a una base de datos SQL Server.

SqlCommand

Utilizado para el manejo de comandos SQL y ejecutar


procedimientos almacenados.

SqlDataAdapter

Llena un DataSet con los resultados de una consulta o comando


SQL.

SqlReader

Conjunto de registros de lectura nica.

DataSet

Conjunto de registros desconectado

Accesando a datos con


ADO.NET
1. El cliente realiza una peticin
2. Se crean los objetos SqlConnection y
SqlDataAdapter
3. Se llena el DataSet con el
DataAdapter y se cierra la conexin
4. Se retorna el DataSet al cliente
5. El cliente manipula los datos
6. Se actualiza el DataSet
7. Se utiliza el SqlDataAdapter
para abrir el SqlConnection,
actualizar la base de datos y cerrar
la conexin
Tpicamente existen 3 fases en un acceso a datos: primero, el acceso al origen
de datos y su exposicin en una forma web; segundo, la manipulacin de esos
datos y tercero, el retorno de esa informacin actualizada hacia la base de datos.

DataAdapter
DataAdapter
SelectCommand

Database

InsertCommand
UpdateCommand
DeleteCommand

DataSet
TableMappings

DataAdapter
Sabe cmo obtener los datos
de la fuente de datos y
guardar los cambios

DataAdapter
Connection

Expone 2 mtodos:

Fill (DataSet y Table)


Update (DataSet y Table)

Provee mecanismos de mapeo


entre las tablas y columnas
Los usuarios pueden configurar
sus propios comandos o stored
procedures de
insert/update/delete
Permite a un solo DataSet ser
llenado con mltiples fuentes de
datos

Connection

SelectCommand
SelectCommand

UpdateCommand
InsertCommand
InsertCommand
DeleteCommand
DeleteCommand

TableMappings

DataSet Object
Equivalent al Recordset de
ADO pero ms potente
Modelo Relacional
Contiene tablas, columnas,
filas, constraints,
vistas y relaciones

Modelo desconectado

DataSet
Tables
Table
Columns
Column
Constraints
Constraint

Rows
No tienen conocimiento de
Row
la fuente de datos
Relations
Indexacin tipo Arreglo
Relation
Tipos de datos
Soporta Databinding
Soporta actualizaciones en batch
Se conecta a la fuente de datos mediante el DataAdapter

Arquitectura para DataSet


SQL Server 2000
Categorias

SQL Server 6.5

Productos

Clientes

SqlDataAdapter

DataSet

Categorias

Productos

Pedidos

OleDbDataAdapter

Empleados

Archivo
XML

Clientes

Pedidos

XmlDataDocument

XML Web
service

Modelo de objeto del DataSet


Colecciones Comunes
Tables (Coleccin de objetos DataTable)
Relations (Coleccin de objetos DataRelation)

Soporta enlace a controles Web y Windows.


El esquema puede ser definido a travs de
cdigo o empleando un XSD.
DataColumn

DataTable
DataRelation

DataRow
Constraints

Ciclo de Vida del DataSet


DataSet
Table1

Extrae tablas
Con el Managed
Provider

Original
DataStore

Table2

Actualiza los cambios


con el Managed
Provider

DataSet

DataSet
Table1

Establece las
relaciones

Hace cambios a
los datos

Table1

Table2
Table2

Objeto Command
Mtodos del Objeto Command:
ExecuteReader Ejecuta y retorna un DataReador
ExecuteNonQuery Ejecuta y no retorna nada
ExecuteScalar Ejecuta y retorna el primer valor
Dim sSQL As String = "select CompanyName from customers where customerid = '"
& DropDownList1.SelectedItem.Value & "'"
Dim sConnectionString As String = "Provider=SQLOLEDB;Data
Source=localhost;uid=sa;pwd=;database=NWTradersTravel"
Dim oConnection As New OleDb.OleDbConnection(sConnectionString)
Dim oCommand As New OleDb.OleDbCommand(sSQL, oConnection)
oCommand.Connection.Open()
TextBox2.Text = oCommand.ExecuteScalar()
oConnection.Close()

DataReader Object

Modelos de acceso forward-only y readonly


No permite hacer scrolling
No permite actualizar los datos
Representa los resultados de la consulta o
comando ejecutado

Equivalente a un Recorset FO/RO


Permite hacer Databinding a Web controls

DataView
Permite establecer filtros y criterios de
ordenado en una vista de una Tabla
Una vista viva de un DataTable
Cualquier nmero de DataViews distintos
pueden ser creados para una misma Tabla

Pueden ser usados en los Databindings

ADO.NET y Proveedores Administrados


Una coleccin de clases que permiten
acceder a los orgenes de datos:
Microsoft SQL Server 2000, SQL Server 7,
y MSDE
Otros proveedores OLEDB
Por ejemplo: Oracle

Establece la conexin entre los DataSets y el


repositorio de los datos

Dos proveedores base:


OLEDB: Namespace System.Data.OleDb
SQL Server: Namespace System.Data.Sql

Creacin de un DataAdapter que


utiliza una sentencia SELECT

Puede crear un DataAdapter para ejecutar una sentencia


SELECT
Acceso de slo lectura a datos, para aplicaciones que trabajen
de forma desconectada
Dos maneras de crear un DataAdapter
Utilizando el Asistente de configuracin de DataAdapter
Cdigo de programacin
Debe especificar:
Una conexin, nueva o existente
La sentencia SELECT de la consulta

Puede crear un objeto DataAdapter para ejecutar una nueva sentencia


SELECT. Esto ayuda a las aplicaciones que trabajan de forma desconectada
a tener acceso de slo lectura a la informacin que se encuentre en una base
de datos.

Para crear un DataAdapter


dinmicamente
1.
2.

3.
4.
5.

Cree un objeto SqlDataAdapter u OleDbDataAdapter.


Cree un objeto SqlConnection u OleDbConnection. Especifique la
cadena de conxin que utilizar para conectarse a la base de datos.
Cree un objeto SqlCommand u OleDbCommand. Especifique una
sentencia SQL para devolver la informacin requerida de la base de
datos.
Invoque el mtodo AddParameter del objeto comando para especificar
los parmetros que requiera la sentencia SELECT.
Asigne el objeto comando a la propiedad SelectCommand del objeto
DataAdapter.

Imports System.Data.SqlClient
Dim daProducts As New SqlDataAdapter()
Dim cnNorthwind As New & _
SqlConnection("data source= (local);initial catalog= Northwind;"& _
"integrated security=SSPI")
Dim cmSelect As New SqlCommand("SELECT * FROM Products",
cnNorthwind)
daProducts.SelectCommand = cmSelect

Creacin de un DataAdapter que utilice


un procedimiento almacenado

Puede crear un DataAdapter dinmicamente, que ejecute un


procedimiento almacenado ya existente
Especificando el procedimiento almacenado para SelectCommand
Especificando el procedimiento almacenado para InsertCommand,
UpdateCommand y DeleteCommand, si es necesario

Tambin lo puede crear utlizando el Asistente o por cdigo


de programacin
Debe especificar:
Una conexin, nueva o existente
El(los) procedimiento(s) almacenado(s)

Prctica

Puede crear un DataAdapter para ejecutar un procedimiento almacenado que


ya exista. Esto le permite a las aplicaciones que trabajan de manera
desconectada, devolver complejas uniones entre tablas, utilizando funcionalidad
existente en la base de datos.

Para crear un DataAdapter


dinmicamente
1.
2.
3.

4.

Cree un objeto SqlDataAdapter u OleDbDataAdapter.


Cree un objeto SqlConnection u OleDbConnection (o utilice un objeto
XxxConnection que est disponible).
Cree un objeto SqlCommand u OleDbCommand. Especifique las
siguiente propiedades para ese objeto: Connection El objeto conexin
utilizado. CommandText El nombre del procedimiento almacenado que
se desea invocar. CommandType
System.Data.CommandType.StoredProcedure
Invoque el mtodo AddParameter del objeto comando para especificar
los parmetros que necesite el procedimiento almacenado. Asigne el
objeto comando a la propiedad SelectCommand del objeto DataAdapter.

Imports System.Data
Imports System.Data.SqlClient
Dim daProdCat As New SqlDataAdapter()
Dim cmSelect As New SqlCommand()
cmSelect.Connection = cnNorthwind
cmSelect.CommandText = "GetProductsAndCategories
cmSelect.CommandType = CommandType.StoredProcedure
daProdCat.SelectCommand = cmSelect

Cmo llenar una tabla de un


DataSet utilizando un DataAdapter?
Puede llenar una tabla de un DataSet
utilizando un DataAdapter
Invoque el mtodo Fill del DataAdapter

El mtodo Fill ejecuta el SelectCommand


Llene la tabla del DataSet con el contenido y la
estructura del resultado de la consulta
Puede llenar una tabla de un DataSet utilizando un DataAdapter. Invoque el
mtodo Fill del DataAdapter, especificando la tabla del Dataset que desea llenar.
Dim dsCustomers As New DataSet()
daCustomers.Fill(dsCustomers, "Customers")
DataGrid1.DataSource = dsCustomers

Qu son los comandos de


modificacin de datos?
Los objetos SqlDataAdapter y OleDbDataAdapter
poseen propiedades de tipo comando que pueden
ser utilizadas para modificar los datos de un origen
de datos
InsertCommand
UpdateCommand
DeleteCommand

La sintaxis es esencialmente la misma para los


objetos SqlDataAdapter y OleDbDataAdapter, y para
la serie de objetos de tipo comando
Dim InsertCommand As New SqlCommand(...)
Un DataAdapter utiliza objetos de tipo comando para modificar la informacin de
un origen de datos. El DataAdapter usa estos objetos para guardar en la base de
datos, los cambios realizados en el DataSet. Estos objetos comandos pueden
contener sentencias SQL o llamadas a procedimientos almacenados.

Ejemplo 1
Dim cmUpdate As New SqlCommand("UPDATE Customers " & _
"SET CustomerID = @ID, CompanyName = @Name " & _
"WHERE (CustomerID = @OrigID)",cnNorthwind)
cmUpdate.Parameters.Add(New SqlParameter("@ID", _
SqlDbType.NChar,5,ParameterDirection.Input, _
False,0,0,"CustomerID",DataRowVersion.Current,Nothing))
cmUpdate.Parameters.Add(New SqlParameter("@Name", _
SqlDbType.NVarChar,40,ParameterDirection.Input,False, _
0,0,"CompanyName",DataRowVersion.Current, Nothing))
cmUpdate.Parameters.Add(New SqlParameter("@OrigID", _
SqlDbType.NChar,5,ParameterDirection.Input,False,0,0, _
"CustomerID",DataRowVersion.Original,Nothing))
daCustomers.UpdateCommand = cmUpdate

Ejemplo - 2
Dim cmDelete As New SqlCommand("DELETE FROM
Customers " & _
"WHERE (CustomerID = @ID)",cnNorthwind)
cmDelete.Parameters.Add(New SqlParameter("@ID", _
SqlDbType.NChar,5,ParameterDirection.Input,False,0,0,
_
"CustomerID",DataRowVersion.Original,Nothing))
daCustomers.DeleteCommand = cmDelete

XML y Datasets

XML juega un papel muy importante en la manera cmo el Framework de .NET


manipula los datos. XML es el formato utilizado por el Framework para
almacenar y transmitir cualquier clase de informacin. Los objetos DataSet son
capaces de guardar y transportar datos en formato XML.

Caractersticas relacionadas con


los DataSets y el formato XML

La estructura de un DataSet puede ser definida en un esquema XML.


La estructura de un DataSet, que incluye tablas, columnas, relaciones y
restricciones, puede ser definida usando un esquema XML.
Los esquemas XML son formatos de la W3C, basados en estndares, que
pueden ser utilizados para definir una estructura de datos XML.

Generacin de una clase DataSet.


Puede generar una clase DataSet que incorpore informacin de esquema para
definir su propia estructura de datos (tablas, columnas) como miembros de la
clase.

Mtodos del DataSet


Puede leer un documento XML o flujo de datos y llevarlo a un DataSet utilizando
el mtodo ReadXML del objeto. Tambin podr escribir el contenido del DataSet
en cdigo XML con el mtodo WriteXML
Debido a que XML es un formato estndar de intercambio de datos entre
diferentes aplicaciones Web, puede cargar un DataSet con informacin con
formato XML que haya sido enviada por alguna otra aplicacin
Similarmente, el DataSet puede escribir informacin hacia un flujo de datos o
hacia un documento, para despus ser compartido con otras aplicaciones o
simplemente almacenado como un documento XML.

Continuacin
Creacin de una vista XML del contenido de un
DataSet
Puede crear una vista XML (un objeto XmlDataDocument) del
contenido de un DataSet y luego manipular o representar los
datos utilizando los mtodos XML o relacionales del objeto
DataSet. Las dos vistas se sincronizan automticamente
cada vez que cambian.

Transformacin de los datos


Suministre pginas alternativas que utilicen texto esttico y
grficos para mostrar informacin, y vnculos estndar para la
entrada de datos.
Puede usar el objeto XSL Transform para cargar un archivo
de hoja de estilo .xsl y aplicar una transformacin. El
documento resultado puede ser un archivo XML o HTML.

Mtodos del objeto DataSet


basados en XML

Utilice ReadXml para cargar datos de un archivo o flujo de


datos
Dim ds DataSet = new DataSet()
ds.ReadXml(Server.MapPath("filename.xml"))

Utilice WriteXml para escribir datos XML a un archivo o flujo de


datos
Dim ds As New DataSet()
Dim da As new SqlDataAdapter("select * from Authors", conn)
da.Fill(ds)
ds.WriteXml(Server.MapPath("filename.xml"))

Utilice GetXml para escribir datos XML a una variable de tipo


cadena
Dim strXmlDS As String = ds.GetXml()

Contenido de un DataSet a travs


de datos XML

El contenido de un DataSet puede provenir de un flujo de datos


XML o un documento. Adems, con el Framework de .NET, tiene la
flexibilidad de conocer qu informacin est siendo cargada del
documento XML y cmo se crear el esquema o la estructura
relacional del DataSet.
Utilice ReadXml para cargar datos de un archivo o flujo de
datos:
Dim ds As New DataSet()
ds.ReadXml(Server.MapPath("filename.xml"))
Utilice WriteXml para escribir datos XML en un archivo o flujo
de datos:
Dim ds As New DataSet()
Dim da As New SqlDataAdapter("select * from Authors", conn)
da.Fill(ds)
ds.WriteXml(Server.MapPath("filename.xml"))
Utilice GetXml para obtener los datos XML y asignarlos a una
variable de tipo cadena:
Dim strXmlDS As String = ds.GetXml()

Sincronizacin de un DataSet
con un XmlDataDocument

DataSet con un
XmlDataDocument (Parte I)
El objeto DataSet suministra una representacin relacionada de los
datos. Para un acceso a datos jerrquico puede utilizar las clases
XML disponibles en el Framework de .NET. Anteriormente las
representaciones jerrquicas y relacionales de datos haban sido
utilizadas por separado. Sin embargo, el Framework de .NET ofrece
un acceso sincronizado y en tiempo real a ambas
representacionesde datos, mediante los objetos DataSet y
XmlDataDocument. Cuando un objeto DataSet es sincronizado con
un objeto XmlDataDocument, ambos objetos estn trabajando con
un nico conjunto de datos. Esto significa que si se realiza un
cambio en el DataSet, este cambio se ver reflejado en el
XmlDataDocument y viceversa. La relacin que existe entre los
objetos DataSet y XmlDataDocument crea una gran flexibilidad al
permitir a una aplicacin utilizar un conjunto determinado de datos y
poder disponer de toda la gama de sevicios que posee el DataSet.

DataSet con un
XmlDataDocument (Parte II)
El sincronizar un XmlDataDocument con un DataSet preserva la
fidelidad de un documento XML. Si un DataSet es llenado con
informacin de un documento XML utilizando el mtodo ReadXml,
esa informacin puede diferir drsticamente del documento original
si luego es devuelta al documento utilizando el mtodo WriteXml.
Esa diferencia de informacin se puede presentar debido a que el
DataSet no mantiene el formato del documento XML original, como
por ejemplo, los espacios en blanco o la jerarquizacin y orden de
los elementos. El DataSet tampoco contiene los elementos del
documento XML original que no son iguales al esquema XML que
posee y que ignora. Sincronizar ambos objetos permite mantener
ese formato y esa estructura del documento XML original en el
XmlDataDocument, mientras que el DataSet slo contiene los datos
y la informacin de esquema apropiada al DataSet.

Cmo sincronizar un DataSet


con un XmlDataDocument?
Guarde los datos XML en un XmlDataDocument
Dim objXmlDataDoc As New XmlDataDocument()
objXmlDataDoc.Load(Server.MapPath ("file.xml"))
-or
objXmlDataDoc.DataSet.ReadXml(Server.MapPath
("file.xml"))
Guarde el DataSet en un XmlDataDocument
Dim ds As New DataSet()
Llena al objeto ds
Dim objXmlDataDoc As New XmlDataDocument(ds)
Existen dos maneras de sincronizar un Dataset con un XmlDataDocument:
Guardando los datos XML en un XmlDataDocument.
Guardando el DataSet en un XmlDataDocument.

Manejando los errores


provenientes de la base de datos
Todas las clases que se encuentran
dentro de los namespaces de ADO.NET
utilizan el mtodo estndar de reporte
de errores: las excepciones
Muchas de las excepciones levantadas
por los objetos de ADO.NET derivan de
System.Data.DataException
La clase SqlException, de la librera de objetos de SqlClient, encapsula
la informacin generada por un error producido en SQLServer. Este
objeto posee una propiedad Errors que es una coleccin de objetos
SqlError.

Resumen
ADO.NET es la evolucin de ADO
Es desconectado, para acompaar el
modelo basado en Web
Muy flexible para trabajar con Datos
Aumenta las capacidades de organizar
lgicamente los datos
Amplio soporte para XML
Lo que permite mayores habilidades para
trabajar y compartir datos

Interacta con una gran variedad de


orgenes

1. T estas creando una aplicacin Web que leer una Base de Datos
SQL Server 6.5. La aplicacin generar una serie de reportes a partir
de la BD. Deseas que estos reportes se ejecuten lo ms rpido
posible. Qu debes hacer?

A. Crear una Objeto SQLConnection para conectarse a


la base de datos y crear un objeto SQLCommand,
para invocar un store procedure que regresa la data
del reporte.
B. Crear una Objeto OleDbConnection para conectarse
a la base de datos y crear un objeto
OleDbCommand, para invocar un store procedure
que regresa la data del reporte.
C. Usar interoperatividad COM y crear un objeto
ADODB.Connection, para conectarse a la BD y con
un objeto ADODB.Command, invocar al store
Procedure.
D. Configurar SQL Server para soportar acceso HTTP, y
crear una plantilla XML para ejecutar el store
Procedure.

2. T estas creando una pgina que muestra una lista de clientes. La


informacin de los clientes est almacenada en una BD SQL Server. El
servidor donde se encuentra la BD se llama ServidorDB, la base de
datos se denomina Mercadeo, la tabla es Clientes, el usuario para
conectarse a la BD es UsuarioCli y el password es 123. Cul cadena
de conexin deberaa utilizar?

A. "Provider=SQLOLEDB.1;File Name ="Data\MyFile.udl


B. Provider=MSDASQL;Data Source=ServidorDB;Initial
Catalog=Mercadeo;User ID=UsuarioCli;Password=123"
C. "Data Source= ServidorDB;Initial
Catalog=Mercadeo;User ID=UsuarioCli;
Password=123"
D. "Data Source= ServidorDB;Database=Mercadeo;Initial
File Name=Clientes;User ID=UsuarioCli;Pwd=123"

3. Se desea ejecutar un Strore Procedure que recibe un parmetro


de entrada y retorna un valor. Se desea almacenar el valor
retornado en una variable. Qu se debera hacer?

A. Crear un objeto SqlDataAdapter e invocar el mtodo


Fill que ejecuta el store procedure y asignar el valor
retornado a la variable.
B. Crear un objeto SqlDataAdapter e invocar el mtodo
Update que ejecuta el store procedure y asignar el
valor retornado a la variable.
C. Crear un objeto SqlCommand e invocar el mtodo
ExecuteScalar que ejecuta el store procedure y
asignar el valor retornado a la variable.
D. Crear un objeto SqlCommand e invocar el mtodo
ExecuteReader que ejecuta el store procedure y
asignar el valor retornado a la variable.

Anda mungkin juga menyukai