Vous êtes sur la page 1sur 21

TAREA 3

ADO.NET

GRUPO 70:
Itziar Uranga Martin
David Pablos Gonzalez
ADO.NET GRUPO 70

¿EN QUÉ CONSISTEN LOS MODOS (DE ACCESO A ORÍGENES


DE DATOS) CONECTADO Y DESCONECTADO?

• MODO DE ACCESO CONECTADO


Un entorno conectado es aquel en el que un usuario o una
aplicación están conectados continuamente a una fuente de
datos. Es más probable que los datos estén más actualizados
que en un escenario desconectado pero debe mantenerse una
conexión constante.

Informacion extraida de: http://www.scribd.com/doc/505773/


Acceso-a-datos-en-Visual-Basic-NET

Cuando se está en modo conectado se está continuamente


interactuando con la BD a través de consultas SQL ejecutadas
explícitamente.

Algo a resaltar es que este tipo de acceso a la base de


datos es que puede consumir grandes recursos sacrificando el
rendimiento al mantener conexiones abiertas a la base de
datos.

• MODO DESCONECTADO
Un entorno desconectado es aquel en el que un usuario o una
aplicación no están conectados constantemente a una fuente de
datos. Las aplicaciones de Internet utilizan frecuentemente
arquitecturas desconectadas. Se abre la conexión, se recuperan
los datos y la conexión se cierra. Las conexiones se utilizan
durante el menor tiempo posible, permitiendo que menos
conexiones den servicio a más usuarios pero los datos no
siempre están actualizados.

Informacion extraida de: http://www.scribd.com/doc/505773/


Acceso-a-datos-en-Visual-Basic-NET

Normalmente, cuando se recoge información de una Base de


Datos es con el propósito de realizar algún tipo de proceso
con ella: mostrarla por pantalla, procesarla o enviarla a
algún componente. Con frecuencia, no sólo necesitaremos una
sola fila, sino un conjunto de ellas. Y también será frecuente
que necesitemos información que se encuentre en más de una
tabla (join de tablas). Lo que hará la aplicación entonces
será cargarlos y tratarlos como un bloque compacto. Sería muy
costoso/tedioso tener que conectar cada vez que queramos
avanzar al registro siguiente para recoger la información de
dicho registro. . En un modelo desconectado, lo que se hace
para solucionar ese inconveniente es almacenar temporalmente
ADO.NET GRUPO 70

toda la información necesaria para poder trabajar


posteriormente con ella. Esto es lo que representa un objeto
DataSet en el modelo ADO.NET.

ADO.NET utiliza un modelo de acceso pensado para entornos


desconectados. Esto quiere decir que la aplicación se conecta
al origen de datos, hace lo que tiene que hacer, por ejemplo
seleccionar registros, los carga en memoria y se desconecta
del origen de datos.

Como contrapartida a las ventajas que representa sobre el


modo conectado hay que tener en cuenta que el objeto/objetos
DataSet que se crean para trabajar en modo desconectado
consumen memoria, por lo que en diversos entornos (como por
ejemplo, cuando la base de datos es muy extensa) no es
recomendable este tipo de acceso.

Cada enfoque, modo conectado o desconectado, ofrece una


serie de beneficios y desventajas. La elección del enfoque
depende en gran medida de las características de la
arquitectura y las plataformas que vayan a utilizarse para el
intercambio de los datos.

¿EN QUÉ CONSISTEN LOS OBJETOS C O N N E C T I O N, C O M M A N D Y


TRANSACT I O N, PARA QUÉ SE USAN?

• OBJETO CONNECTION
El objeto Connection nos proporciona una conexión a una base
de datos desde una página ASP.

Para establecer la conexión lo primero que hacemos es crear


el Objeto Connection por medio de la propiedad CreateObject de
objeto Server:

<% Set conexion=Server.CreateObject("ADODB.Connection")%>

Una vez establecida la instancia del objeto pasamos a


configurarlo mediante sus distintas propiedades y métodos.

PROPIEDADES

 ConnectionString: Especifica la referencia a la base


de datos con la cual queremos conectar, conteniendo en
una cadena de texto la información necesaria para
ADO.NET GRUPO 70

efectuar esa conexión mediante parejas de valores


separadas por ";".

Los valores que podemos asignar son:

Data Source: DSN=Nombre ODBC de la Base de Datos


Usuario: UID=Nombre de Usuario
PWD=Password del usuario para la base de
Password:
datos

Ejemplo:

<% conexion.ConnectionString="DSN=MIOdbc;UID=pepe;PWD=1234" %>

 Mode: Especifica los permisos de la conexión.

Algunos de los valores más habituales que podemos asignar


son:

1 Establece permiso solo de Lectura


2 Establece permiso solo de Escritura
3 Establece permiso de Lectura/Escritura

Ejemplo: <% conexion.Mode=3 %>

METODOS

 BeginTrans: Abre una transacción; todas las


operaciones que realicemos a partir de ese momento no
serán efectivas hasta que no cerremos la transacción.

Ejemplo: <% conexion.BeginTrans %>

 Close: Cierra el objeto

Ejemplo: <% conexion.close %>

 CommitTrans: Cierra una transacción haciendo


efectivos los cambios efectuados dentro de ella.

Ejemplo: <% conexion.CommitTrans %>

 Execute: Ejecuta una sentencia SQL contra la base de


datos.

Ejemplo:

<% Set resultado=conexion.execute (Select * from amigos) %>


ADO.NET GRUPO 70

 Open: Abre la conexión con los parámetros


especificados en las propiedades.

Ejemplo: <% conexion.open %>

 RollBackTrans: Deshace todos los cambios efectuados


en la base de datos desde el inicio de la transacción.

Ejemplo: <% conexion.RollBackTrans %>

• OBJETO COMMAND

El objeto Command se utiliza para enviar comandos SQL a una


base de datos y almacenar los resultados (en caso de que se
produzcan) en un objeto recordset.

Informacion extraida de: la ayuda MSDN de Visual Studio 2005

Una vez establecida una conexión a un origen de datos, se


pueden ejecutar comandos y devolver resultados desde el mismo
mediante un objeto Command. Para crear un comando, se utiliza
el constructor Command, que toma argumentos opcionales de una
instrucción SQL para ejecutar en el origen de datos, un objeto
Connection y un objeto Transaction. También se puede crear un
comando para una determinada conexión mediante el método
CreateCommand del objeto Connection. La instrucción SQL del
objeto Command se puede consultar y modificar mediante el uso
de la propiedad CommandText.

El objeto Command expone varios métodos Execute que se


utilizan para llevar a cabo la acción deseada. Cuando los
resultados se devuelven en forma de secuencia de datos, se
utiliza ExecuteReader para devolver un objeto DataReader.
ExecuteScalar sirve para devolver un valor Singleton.
ExecuteNonQuery se utiliza para ejecutar comandos que no
devuelven filas.

A continuación se presenta las propiedades y métodos:

 Propiedades públicas

Nombre Descripción
CommandText Obtiene o establece el comando de texto
que se debe ejecutar en el origen de
datos.
CommandTimeout Obtiene o establece el tiempo de espera
antes de terminar el intento de ejecutar
un comando y generar un error.
CommandType Indica o especifica cómo se interpreta la
ADO.NET GRUPO 70

propiedad CommandText.
Connection Obtiene o establece el objeto DbConnection
que utiliza este DbCommand.
Container Obtiene IContainer que contiene Component.
(Se hereda de Component).
DesignTimeVisible Obtiene o establece un valor que indica si
el objeto de comando debe estar visible en
un control de interfaz personalizado.
Parameters Obtiene la colección de objetos
DbParameter.
Site Obtiene o establece ISite de Component.(Se
hereda de Component).
Transaction Obtiene o establece la transacción
DbTransaction en la que se ejecuta este
objeto DbCommand.
UpdatedRowSource Obtiene o establece cómo se aplican los
resultados de un comando al objeto DataRow
cuando lo utiliza el método Update de un
objeto DbDataAdapter.

 Métodos públicos

Nombre Descripción
Cancel Intenta cancelar la ejecución de
un objeto DbCommand.
CreateObjRef Crea un objeto que contiene toda
la información relevante
necesaria para generar un proxy
utilizado para comunicarse con un
objeto remoto. (Se hereda de
MarshalByRefObject).
CreateParameter Crea una nueva instancia de un
objeto DbParameter.
Dispose Sobrecargado. Libera los recursos
utilizados por el objeto
Component. (Se hereda de
Component).
Equals Sobrecargado. Determina si dos
instancias de Object son iguales.
(Se hereda de Object).
ExecuteNonQuery Ejecuta una instrucción SQL en un
objeto de conexión.
ExecuteReader Sobrecargado. Ejecuta
CommandText en Connection y
devuelve un objeto DbDataReader.
ExecuteScalar Ejecuta la consulta y devuelve la
primera columna de la primera
fila del conjunto de resultados
que devuelve la consulta. Se
omiten todas las demás columnas y
filas.
ADO.NET GRUPO 70

GetHashCode Sirve como función hash para un


tipo concreto. GetHashCode es
apropiado para su utilización en
algoritmos de hash y en
estructuras de datos como las
tablas hash. (Se hereda de
Object).
GetLifetimeService Recupera el objeto de servicio de
duración actual que controla la
directiva de duración de esta
instancia. (Se hereda de
MarshalByRefObject).
GetType Obtiene el objeto Type de la
instancia actual. (Se hereda de
Object).
InitializeLifetimeService Obtiene un objeto de servicio de
duración para controlar la
directiva de duración de esta
instancia. (Se hereda de
MarshalByRefObject).
Prepare Crea una versión preparada (o
compilada) del comando en el
origen de datos.
ReferenceEquals Determina si las instancias de
Object especificadas son la misma
instancia. (Se hereda de Object).
ToString Devuelve un objeto String que
contiene el nombre del objeto
Component, en caso de que exista.
Este método no debe reemplazarse.
(Se hereda de Component).

• OBJETO TRANSACTION
Las transacciones de ADO.NET se utilizan cuando se desea
enlazar varias tareas para que se ejecuten como una sola
unidad de trabajo. Por ejemplo, consideremos una aplicación
que realiza dos tareas. Primero, actualiza una tabla con
información de pedidos y luego, actualiza una tabla que
contiene la información de inventario, cargando en cuenta los
elementos pedidos. Si alguna de las tareas da error, ambas
actualizaciones se revierten.

Una transacción se considera local cuando consta de una


única fase y es controlada directamente por la base de datos.
Las transacciones se consideran distribuidas cuando se
coordinan mediante un monitor de transacciones y utilizan
mecanismos a prueba de errores (como confirmación en dos
fases) en la resolución de transacciones.

Cada proveedor de datos de .NET Framework tiene su propio


objeto Transaction para realizar transacciones locales. Para
transacciones que se realicen en una base de datos de SQL
Server, se utiliza una transacción de System.Data.SqlClient.
ADO.NET GRUPO 70

En transacciones de Oracle, se debe utilizar el proveedor


System.Data.OracleClient. La c l a s e DbTransaction e s t á
disponible para la escritura de código independiente del
proveedor que requiere transacciones.

El tipo DbTransaction expone los siguientes miembros.

 Constructores
Nombre Descripción
DbTransaction Inicializa un nuevo objeto DbTransaction.
 Métodos

Nombre Descripción
Confirma la transacción de base de
Commit
datos.
Crea un objeto que contiene toda la
información relevante necesaria para
CreateObjRef generar un proxy utilizado para
comunicarse con un objeto remoto. (Se
hereda de MarshalByRefObject).
Sobrecargado. Libera los recursos no
administrados que utiliza
Dispose
DbTransaction y, opcionalmente,
libera los recursos administrados.
Determina si el objeto Object
Equals especificado es igual al objeto
Object actual. (Se hereda de Object).
Permite que un objeto Object intente
liberar recursos y realizar otras
operaciones de limpieza antes de que
Finalize
el objeto Object sea reclamado por el
recolector de elementos no
utilizados. (Se hereda de Object).
Actúa como función hash para un tipo
GetHashCode
concreto. (Se hereda de Object).
Recupera el objeto de servicio de
duración actual que controla la
GetLifetimeService directiva de duración de esta
instancia. (Se hereda de
MarshalByRefObject).
Obtiene el objeto Type de la
GetType instancia actual. (Se hereda de
Object).
Obtiene un objeto de servicio de
duración para controlar la directiva
InitializeLifetimeService
de duración de esta instancia. (Se
hereda de MarshalByRefObject).
MemberwiseClone Sobrecargado.
Deshace una transacción desde un
Rollback
estado pendiente.
Devuelve una clase String que
ToString representa la clase Object actual.
(Se hereda de Object).
ADO.NET GRUPO 70

 Propiedades

Nombre Descripción
Especifica el objeto DbConnection asociado a la
Connection
transacción.
Especifica el objeto DbConnection asociado a la
DbConnection
transacción.
IsolationLevel Especifica IsolationLevel para esta transacción.

 Implementaciones explícitas de interfaces

Nombre Descripción
Obtiene el objeto DbConnection
asociado a la transacción, o una
IDbTransaction..::.Connection
referencia nula si la transacción
ya no es válida.

 Realizar una transacción mediante ADO.NET

Con los objetos Connection y Transaction se puede comenzar


una transacción, confirmarla y deshacerla. Para realizar una
transacción hay que seguir los siguientes pasos:

1. Se llama al método BeginTransaction del objeto Connection


para indicar el comienzo de la transacción. El método
BeginTransaction devuelve una referencia a Transaction.
Esta referencia se asigna a los objetos Command inscritos
en la transacción.
2. El objeto Transaction se asigna a la propiedad
Transaction del Command que se desea ejecutar. Si se
ejecuta un comando (Command) en una conexión (Connection)
que tiene una transacción (Transaction) activa y no se ha
asignado el objeto Transaction a la propiedad Transaction
del objeto Command, se inicia una excepción.
3. A continuación se ejecutan los comandos deseados.
4. Finalmente se llama al método Commit del objeto
Transaction para completar la transacción o al método
Rollback para cancelarla.

En el ejemplo de código siguiente se muestra la lógica de


las transacciones que se realizan mediante ADO.NET con
Microsoft® SQL Server™.

Dim myConnection As SqlConnection = New SqlConnection("Data


Source=localhost;Initial Catalog=Northwind;Integrated
Security=SSPI;")
ADO.NET GRUPO 70

myConnection.Open()

' Start a local Transaction.


Dim myTrans As SqlTransaction =
myConnection.BeginTransaction()

' Enlist the Command in the current Transaction.


Dim myCommand As SqlCommand = myConnection.CreateCommand()
myCommand.Transaction = myTrans

Try
myCommand.CommandText = "Insert into Region (RegionID,
RegionDescription) VALUES (100, 'Description')"
myCommand.ExecuteNonQuery()
myCommand.CommandText = "Insert into Region (RegionID,
RegionDescription) VALUES (101, 'Description')"
myCommand.ExecuteNonQuery()
myTrans.Commit()
Console.WriteLine("Both records are written to database.")
Catch e As Exception
Try
myTrans.Rollback()
Catch ex As SqlException
If Not myTrans.Connection Is Nothing Then
Console.WriteLine("An exception of type " &
ex.GetType().ToString() & _
" was encountered while attempting to
roll back the Transaction.")
End If
End Try

Console.WriteLine("An exception of type " &


e.GetType().ToString() & _
"was encountered while inserting the
data.")
Console.WriteLine("Neither record was written to
database.")
Finally
myConnection.Close()
End Try

EXECUTENONQUERY, E X E C U T E S C A L A R, E X E C U T E R E A D E R

DESCRIBIR BREVEMENTE LA SEMÁNTICA DE ESTOS LOS MÉTODOS Y


EXPLICAR PARA QUÈ SE UTILIZAN:
• EXECUTENONQUERY
SINTAXIS

Public Overrides Function ExecuteNonQuery As Integer


ADO.NET GRUPO 70

Ejecuta una instrucción de Transact-SQL en la conexión y


devuelve el número de filas afectadas.

Se puede utilizar ExecuteNonQuery para realizar operaciones


de catálogo (por ejemplo, consultar la estructura de una base
de datos o crear objetos de base de datos como tablas) o para
cambiar la información de una base de datos ejecutando las
instrucciones UPDATE, INSERT o DELETE. De hecho, normalmente
se utilizan para ejecutar instrucciones que no devuelven
ningún resultado, como las anteriormente citadas.

Para las instrucciones UPDATE, INSERT y DELETE el valor


devuelto corresponde al número de filas afectadas por el
comando. Para el resto de instrucciones, el valor devuelto es
-1. Si se produce una operación de deshacer, el valor devuelto
también es -1.

Informacion extraida de:

http://www.elguille.info/NET/ADONET/
cuando_usar_ExecuteNonQuery_o_ExecuteScalar.htm

A continuación un ejemplo de cómo usar dicho método:


SqlCommand tu_comando=new SqlCommand("INSERT INTO Personas
(nombre, edad)VALUES('Julio',3)",tu_conexion);
tu_comando.ExecuteNonQuery();

F u e n t e : http://www.forosdelweb.com/f29/executereader-
exceutescalar-executenonquery-301123/

EJEMPLO EXECUTENONQUERY VB

' Agregar N datos de prueba,


' usando el procedimiento almacenado
sp_InsertarVariosDatosPrueba
' creado con Visual Basic.
' Este procedimiento almacenado a su vez usa:
sp_TotalFilasPrueba
Dim cnn As SqlConnection = Nothing
Dim cmd As SqlCommand = Nothing
'
LabelAgregar.Text = "Agregando datos..."
LabelAgregar.Refresh()
'
Try
cnn = New SqlConnection(My.Settings.cs_pruebasGuille)
cmd = New SqlCommand("sp_InsertarVariosDatosPrueba", cnn)
cmd.CommandType = CommandType.StoredProcedure

cmd.Parameters.Add("@cuantos", SqlDbType.Int)
cmd.Parameters.Add("@hastaMesActual", SqlDbType.Bit)
ADO.NET GRUPO 70

cmd.Parameters("@cuantos").Value =
CInt(Me.txtCuantos.Text)
cmd.Parameters("@hastaMesActual").Value =
Me.chkHastaEstemes.Checked
cnn.Open()
cmd.ExecuteNonQuery()
LabelAgregar.Text = "Añadir datos de ejemplo (indica el
número):"
LabelStatus.Text = "Datos añadidos correctamente"
Catch ex As Exception
Me.LabelAgregar.Text = "Error: " & ex.Message
LabelStatus.Text = "ERROR"
Finally
If cnn IsNot Nothing AndAlso cnn.State <>
ConnectionState.Closed Then
cnn.Close()
End If
End Try

• EXECUTESCALAR
SINTAXIS

Public Overrides Function ExecuteScalar As Object

Ejecuta la consulta y devuelve la primera columna de la


primera fila del conjunto de resultados que devuelve la
consulta. Se omiten todas las demás columnas y filas.

Se debe utilizar el método ExecuteScalar para recuperar un


único valor (por ejemplo, un valor agregado) de una base de
d a t o s . Esto requiere menos código que el uso del método
ExecuteReader y la posterior realización de las operaciones
necesarias para generar un único valor a partir de los datos
devueltos por un objeto SqlDataReader.

Por tanto, podemos deducir que ExecuteNonQuery se utiliza


para ejecutar la mayoría de las instrucciones de SQL que
ejecutará algo en la base de datos, pero que no devolverá un
valor. En realidad, en algunos casos sí que devolverá un
valor, pero será para indicarnos, por ejemplo, si eliminamos
varias filas de la tabla, devolverá el número de filas
eliminadas.

Por otro lado, ExecuteScalar se utiliza cuando se tenga que


ejecutar un código de SQL del que queremos recuperar la
primera columna de la primera fila.

Este método devuelve un valor de tipo Object que tendremos que


convertir según el valor devuelto.
ADO.NET GRUPO 70

Por ejemplo, si queremos saber el número de registros


(filas) de una tabla que cumple cierto criterio, podemos usar
un comando SQL como este:

SELECT Count(*) FROM Prueba WHERE FechaAlta >= @Param1

En este caso, el valor devuelto será del tipo Int32 y será


el número de filas que hay en la tabla Prueba de la base de
datos indicada en el objeto Connection (que previamente
habremos abierto) que tenga una fecha igual o superior a la
indicada en el parámetro proporcionado a ese comando. Si no
hay ninguna fila que cumpla ese criterio, devolverá cero.

A continuación un ejemplo de cómo usar dicho método:


SqlCommand tu_comando=new SqlCommand("SELECT MAX edad FROM
Personas",tu_conexion);

int i = tu_comando_sql.ExecuteEscalar();

EJEMPLO EXECUTESCALAR VB

Public Function AddProductCategory( _


ByVal newName As String, ByVal connString As String) As
Integer
Dim newProdID As Int32 = 0
Dim sql As String = _
"INSERT INTO Production.ProductCategory (Name) VALUES
(@Name); " _
& "SELECT CAST(scope_identity() AS int);"

Using conn As New SqlConnection(connString)


Dim cmd As New SqlCommand(sql, conn)
cmd.Parameters.Add("@Name", SqlDbType.VarChar)
cmd.Parameters("@Name").Value = newName
Try
conn.Open()
newProdID = Convert.ToInt32(cmd.ExecuteScalar())
Catch ex As Exception
Console.WriteLine(ex.Message)
End Try
End Using

Return newProdID
End Function

• EXECUTEREADER
SINTAXIS

Public Function ExecuteReader As SqlDataReader


ADO.NET GRUPO 70

Envía la propiedad CommandText a Connection y crea un objeto


SqlDataReader (clase que permite leer un conjunto de registros
avanzando únicamente hacia adelante).

C u a n d o l a p r o p i e d a d CommandType s e e s t a b l e c e e n
StoredProcedure, la propiedad CommandText se debe establecer
con el nombre del procedimiento almacenado. El comando ejecuta
este procedimiento almacenado cuando se llama al método
ExecuteReader.

Cuando se utilizan versiones de SQL Server anteriores a SQL


Server 2005, mientras se utiliza SqlDataReader, la conexión
SqlConnection estará atendiendo SqlDataReader. En este estado,
no se pueden realizar otras operaciones en la conexión
SqlConnection, aparte de cerrarla. Esto es así hasta que se
llama al método Close de SqlDataReader. A partir de SQL Server
2005, la característica Conjunto de resultados activo múltiple
permite que varias acciones utilicen la misma conexión.

EJEMPLO EXECUTEREADER

Public Sub CreateCommand(ByVal queryString As String, _


ByVal connectionString As String)
Using Connection As New SqlConnection(connectionString)
Connection.Open()
Dim Command As New SqlCommand(queryString,
Connection)
Dim reader As SqlDataReader = Command.ExecuteReader()
While reader.Read()
Console.WriteLine("{0}", reader(0))
End While
End Using
End Sub

EJEMPLO EXECUTEREADER CON STOREDPROCEDURE

Dim nwindConn As SqlConnection = New SqlConnection("Data


Source=localhost;Integrated Security=SSPI;" & _
"Initial
Catalog=northwind")

Dim salesCMD As SqlCommand = New


SqlCommand("SalesByCategory", nwindConn)
salesCMD.CommandType = CommandType.StoredProcedure
ADO.NET GRUPO 70

Dim myParm As SqlParameter =


salesCMD.Parameters.Add("@CategoryName", SqlDbType.NVarChar,
15)
myParm.Value = "Beverages"

nwindConn.Open()

Dim myReader As SqlDataReader = salesCMD.ExecuteReader()

Console.WriteLine("{0}, {1}", myReader.GetName(0),


myReader.GetName(1))

Do While myReader.Read()
Console.WriteLine("{0}, ${1}", myReader.GetString(0),
myReader.GetDecimal(1))
Loop

myReader.Close()
nwindConn.Close()

• RESUMEN:

Si el usuario espera obtener filas, se invoca al método


ExecuteReader del comando, el cual devuelve registros a un
lector de datos. Si ejecuta un comando UPDATE, INSERT o
DELETE, llamará al método ExecuteNonQuery, el cual devuelve un
valor que indica el número de filas afectadas. Si realiza una
función de agregado, como devolver el recuento de pedidos para
un cliente, se llama al método ExecuteScalar.

CLASES DAT A R E A D E R Y D A T A A D A P T E R

DESCRIBIR PARA QUÉ SE UTILIZAN


Un objeto DataReader es una representación en memoria de una
fila de una Tabla y que permite recorrer la Tabla (solo hacia
ADO.NET GRUPO 70

abajo) de a una fila por vez. Este objeto podrá mostrar los
datos siempre y cuando se mantenga conectado a la base de
datos. Si la conexión se pierde, los datos también.

_ Metodos:

Nombre Descripción
Obtiene la siguiente tupla. Devuelve falso si
Read
no hay mas
Devuelve el valor del campo indicado de la
Item(<id-campo>)
tupla en curso
GetName(número
Devuelve el nombre de la columna
columna)
GetFieldData(<id-
Devuelve el tipo de datos del campo indicado
campo>)

Información extraida de las transparencias de clase

El objeto DataAdapter funciona como un puente entre el


objeto DataSet (que representa los datos obtenidos desde una
fuente de datos en memoria) y dicha fuente de datos,
proporcionando los métodos necesarios para obtener y almacenar
la información. Como se verá más tarde, es el objeto
DataAdapter el encargado de trasladar los cambios realizados
sobre un DataSet a la base de datos asociada a él. Son los
encargados de llamar a los comandos de lectura, actualización,
inserción y eliminación en la base de datos.

Representando esta relación gráficamente,

INDICAR PARA QUÉSE UTILIZAN LOS SIGUIENTES MÉTODOS DE LA


CLASE DATA ADAPTER: FILL, UPDATE
El método Fill cambia los datos almacenados en un objeto
DataSet para que sean acordes a los datos en la fuente datos.
Es decir, (literalmente) rellena el objeto DataSet que se le
indique con los datos correspondientes de la fuente de datos
asociada.

El método Update tiene el efecto contrario, cambia los datos


en la fuente de datos para que sean acordes a los datos del
objeto DataSet que los representan. Es decir, actualiza los
cambios que hayamos podido realizar en los datos del objeto
DataSet en los datos correspondientes de la fuente de datos
asociada.
ADO.NET GRUPO 70

Ejemplo del uso de Fill():

En este ejemplo se muestran los pasos necesarios para


conectarse a una base de datos y crear un objeto DataSet que
represente una de las tablas de la misma.

Private Sub ConnectToData()


Crea la conexión a la base de datos, y la denomina
cnNorthwind
Dim cString As string = "Persist Security
Info=False;Integrated
Security=SSPI;database=northwind;server=mySQLServer"
Dim cnNorthwind As SqlConnection = new
SqlConnection(cString)
Crea un objeto de tipo DataAdapter llamado adpSuppliers que
actúa como puente entre la base de datos y el futuro objeto
DataSet que representará los datos de la base de datos que le
indiquemos al crearlo.
Dim adpSuppliers As SqlDataAdapter = new
SqlDataAdapter()
Abre la conexión con la base de datos y asocia al objeto
DataAdapter una sentencia de selección que selecciona todas
las filas de la tabla Suppliers (cmdSuppliers)
cnNorthwind.Open()
Dim cmdSuppliers As SqlCommand = _
new SqlCommand("SELECT * FROM Suppliers", cnNorthwind)
cmdSuppliers.CommandType = CommandType.Text
adpSuppliers.SelectCommand = cmdSuppliers
Crea un objeto DataSet y a través del método Fill del objeto
adpSuppliers (de tipo DataAdapter) “rellena” dicho DataSet con
los datos provenientes del resultado de la consulta de
selección cmdSuppliers, es decir, todos los registros de la
tabla Suppliers.
ds = New DataSet("Suppliers")
adpSuppliers.Fill(ds)
La siguiente instrucción nos permite posteriormente acceder a
través del método Tables() del DataSet a la tabla que
denominaremos Suppliers mediante una instrucción del tipo
ds.Tables("Suppliers"). Es equivalente a llamar al método Fill
pasándole como segundo argumento el nombre de la tabla
(adpSuppliers.Fill(ds,”Suppliers”)
adpSuppliers.TableMappings.Add("Table", "Suppliers")
End Sub

Ejemplo del uso de Update():


ADO.NET GRUPO 70

Una vez obtenido el objeto DataSet manipularemos los datos


correspondientes y posteriormente deberemos actualizar los
cambios en la base de datos, para lo que utilizaremos el
método update() del objeto DataAdapter que corresponda.

Siguiendo con el ejemplo anterior, supongamos que queremos


cambiar el nombre del supplier con id=1001. Para ello creamos
un objeto de tipo DataRow dr que nos permite iterar sobre las
filas de la tabla Suppliers y acceder a sus atributos.
Dim dr As DataRow
For Each dr In ds.Tables("Suppliers").Rows
If dr("ID") = 1001 Then
dr("name") = "pepe"
End If
Next dr

Para actualizar estos cambios en la base de datos:


1. ejecutamos el método getChanges() del DataSet para
obtener un nuevo DataSet que refleje los cambios
acontecidos en el primero
2. invocamos al método update() del DataAdapter pasándole
como parámetro el nuevo DataSet creado en el paso 1 y
(opcional) el nombre de la tabla a actualizar.
Dim ds2 As DataSet = ds.GetChanges()
adpSuppliers.Update(ds2, "Suppliers")

En resumen,

Informacion extraida de: http://www.beansoftware.com/ASP.NET-


Tutorials/DataSet-DataAdapter.aspx
ADO.NET GRUPO 70

http://www.asptutor.com/asp/vart.asp?id=2

CLASES DATATABLE, D A T A S E T Y DATAVIEW

DESCRIBIR SU FUNCIONALIDAD Y LA RELACIÓN QUE EXISTE ENTRE


ELLAS
E l DataSet de ADO.NET es una representación de datos
residente en memoria que proporciona un modelo de programación
relacional coherente independientemente del origen de datos
que contiene.
Un DataSet representa un conjunto completo de datos,
incluyendo las tablas que contienen, ordenan y restringen los
datos, así como las relaciones entre las tablas.
Los datos en un DataSet pueden ser manipulados sin necesidad
de mantener la conexión con el origen de datos. La conexión se
reestablece cuando se actualizan los cambios.

Informacion extraida de:


http://msdn.microsoft.com/es-es/library/ss7fbaez(VS.80).aspx

E l o b j e t o DataTable representa una tabla de datos en


memoria.

Está relacionado de forma que un DataSet contiene una o más


DataTables. Una DataView es una vista de una sola DataTable.

El objeto DataView representa una vista personalizada de los


datos de que representa un objeto DataTable.

En resumen, los tres objetos son la manera que tiene el


framework .net de representar en memoria a una base de datos,
una tabla y una vista de tabla, respectivamente.

E l o b j e t o DataView es utilizado principalmente para


(asociado a controles de tipo Windows o de tipo web) mostrar
diferentes informaciones de una misma tabla. Por ejemplo,
podríamos crear dos vistas de la tabla pacientes, una para
enfermeras/os y otra para los médicos, con información de la
misma tabla pero restringiendo los campos que unos y otros
pueden visualizar (tal y como se hace en lenguaje SQL), y
mostrar una u otra según el tipo de usuario logueado en el
sistema.

¿LOS CAMBIOS REALIZADOS SOBRE UNA DATATABLE AFECTAN,


ADEMÁS DE A LA INFORMACIÓN EN MEMORIA, A LA BASE DE
DATOS ORIGINAL?
No, los cambios en una DataTable afectan, únicamente, a la
copia de la información en memoria.
ADO.NET GRUPO 70

Para actualizar la base de datos original es necesario un


segundo paso, copiando los datos de la memoria a la base de
datos original. Para este segundo paso se puede hacer, por
ejemplo, llamando al método Update del TableAdapter.

CUANDO SE HA CREADO UN DATAVIEW A PARTIR DE UN


DATATABLE: ¿QUÉ EFECTO TIENE EL MÉTODO DELETE
SOBRE LA DATATABLE A PARTIR DE LA CUAL SE HA CREADO
UNA DATAVIEW?
La eliminación de una fila mediante el método Delete de un
objeto de tipo DataView , conlleva la eliminación de esta
misma fila en su DataTable subyacente. Estos cambios podrán
ser posteriormente aceptados o rechazados mediante la llamada
a l o s m é t o d o s d e l o b j e t o D a t a T a b l e que corresponda
AcceptChanges (para aceptar los cambios) o RejectChanges (para
rechazarlos).

S i AllowDelete t i e n e e l v a l o r true, puede


eliminar filas en la DataView mediante el
método Delete del objeto DataView o DataRowView
y las filas se eliminarán de la DataTable
subyacente. Más tarde puede confirmar o
rechazar las eliminaciones mediante
AcceptChanges o RejectChanges, respectivamente.
Cuando AllowDelete tiene el valor false, se
iniciará una excepción si llama al método
Delete del objeto DataView o DataRowView.

http://msdn2.microsoft.com/es-es/library/
70k6287b.aspx

Informacion extraida de:

http://msdn2.microsoft.com/en-us/library/
system.data.dataset(VS.80).aspx

http://msdn2.microsoft.com/en-us/library/
system.data.dataview(VS.71).aspx

http://msdn2.microsoft.com/en-us/library/
system.data.datatable(VS.71).aspx
ADO.NET GRUPO 70

Obra derivada de: http://24hads2008.awardspace.com/tareas/


Tareas3ado.doc

Con autores: Sara Eguiluz

Garbiñe López

Igarki San Millan

Carmen Rodríguez

Documento bajo licencia:


http://creativecommons.org/licenses/by-nc-nd/2.5/es/