0% encontró este documento útil (0 votos)
75 vistas

ado.net

ado

Cargado por

jose rodriguez
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOC, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
75 vistas

ado.net

ado

Cargado por

jose rodriguez
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOC, PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 20

ADO.

NET
HERRAM IEN TAS AVANZADAS DE DISEÑO DE
SOFTWARE
2007-2008
A D O. N E T

¿EN QUÉ CONSISTEN LOS MODOS (DE ACCESO A ORÍGENES DE DATOS) CONECTADO Y
DESCONECTADO? 3

 MODO DE ACCESO CONECTADO 3


 MODO DESCONECTADO 3

¿EN QUÉ CONSISTEN LOS OBJETOS CONNECTION, COMMAND Y TRANSACTION, PARA QUÉ
SE USAN? 3

 OBJETO CONNECTION 3
PROPIEDADES 4
METODOS 4
 OBJETO COMMAND 5
 OBJETO TRANSACTION 7

EXECUTENONQUERY, EXECUTESCALAR, EXECUTEREADER 10

DESCRIBIR BREVEMENTE LA SEMÁNTICA DE ESTOS LOS MÉTODOS Y EXPLICAR PARA QUÈ SE UTILIZAN: 10
 EXECUTENONQUERY 10
SINTAXIS 10
EJEMPLO EXECUTENONQUERY VB 10
 EXECUTESCALAR 11
SINTAXIS 11
EJEMPLO EXECUTESCALAR VB 11
 EXECUTEREADER 12
SINTAXIS 12
EJEMPLO EXECUTEREADER 12
EJEMPLO EXECUTEREADER CON STOREDPROCEDURE 13
 RESUMEN: 13

CLASES DATAREADER Y DATAADAPTER 14

DESCRIBIR PARA QUÉ SE UTILIZAN 14


INDICAR PARA QUÉSE UTILIZAN LOS SIGUIENTES MÉTODOS DE LA CLASE DATA ADAPTER: FILL, UPDATE 14

CLASES DATATABLE, DATASET Y DATAVIEW 16

DESCRIBIR SU FUNCIONALIDAD Y LA RELACIÓN QUE EXISTE ENTRE ELLAS 16


¿LOS CAMBIOS REALIZADOS SOBRE UNA DATATABLE AFECTAN, ADEMÁS DE A LA INFORMACIÓN EN
MEMORIA, A LA BASE DE DATOS ORIGINAL? 16
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? 17
2
¿ E N Q U É C O N S I S T E N L O S M O D O S ( D E A C C E S O A O R Í G E N E S DE
D AT O S ) C O N E C TA D O Y D E SC O N E C TA D O ?

 MODO DE ACCESO CONECTADO

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

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 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.

3
¿EN QUÉ CONSISTEN LOS OBJETOS CONNECTION, COMMAND Y
T R A N S A C T I O N , PA R A Q U É SE U S A N ?

 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
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
Password: PWD=Password del usuario para la base de 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 %>

4
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) %>

 Open

Abre la conexión con los parámetros especificados en las propiedades.

5
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

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.
CommandTime Obtiene o establece el tiempo de espera antes de
out terminar el intento de ejecutar un comando y generar
un error.
CommandType Indica o especifica cómo se interpreta la propiedad
CommandText.
Connection Obtiene o establece el objeto DbConnection que utiliza
este DbCommand.
Container Obtiene IContainer que contiene Component.(Se

6
hereda de Component).
DesignTimeVisi Obtiene o establece un valor que indica si el objeto de
ble 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.
UpdatedRowSo Obtiene o establece cómo se aplican los resultados de
urce 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.
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).
GetLifetimeServic Recupera el objeto de servicio de duración actual
e 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).
InitializeLifetimeS Obtiene un objeto de servicio de duración para
ervice controlar la directiva de duración de esta
instancia. (Se hereda de MarshalByRefObject).
Prepare Crea una versión preparada (o compilada) del

7
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

 Transacciones locales (ADO.NET)

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. En transacciones de Oracle, se
debe utilizar el proveedor System.Data.OracleClient. La clase
DbTransaction está 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
Commit Confirma la transacción de base de datos.
Crea un objeto que contiene toda la información
relevante necesaria para generar un proxy utilizado
CreateObjRef
para comunicarse con un objeto remoto. (Se hereda de
MarshalByRefObject).
Sobrecargado. Libera los recursos no administrados
Dispose que utiliza DbTransaction y, opcionalmente, libera los
recursos administrados.
Equals Determina si el objeto Object especificado es igual al

8
objeto Object actual. (Se hereda de Object).
Permite que un objeto Object intente liberar recursos y
realizar otras operaciones de limpieza antes de que el
Finalize
objeto Object sea reclamado por el recolector de
elementos no utilizados. (Se hereda de Object).
Actúa como función hash para un tipo concreto. (Se
GetHashCode
hereda de Object).
Recupera el objeto de servicio de duración actual que
GetLifetimeServic
controla la directiva de duración de esta instancia. (Se
e
hereda de MarshalByRefObject).
Obtiene el objeto Type de la instancia actual. (Se
GetType
hereda de Object).
Obtiene un objeto de servicio de duración para
InitializeLifetimeS
controlar la directiva de duración de esta instancia. (Se
ervice
hereda de MarshalByRefObject).
MemberwiseClone Sobrecargado.
Rollback Deshace una transacción desde un estado pendiente.
Devuelve una clase String que representa la clase
ToString
Object actual. (Se hereda de Object).

 Propiedades

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

 Implementaciones explícitas de interfaces

Nombre Descripción
Obtiene el objeto DbConnection asociado a la
IDbTransaction..::.Co
transacción, o una referencia nula si la transacción
nnection
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

9
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;")
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

10
E X E C U T E N O N Q U E RY , E X E C U T E S C A L A R , E X E C U T E R E A DE 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

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.

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)

11
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 datos. 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. 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:

12
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.

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

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


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

Cuando la propiedad CommandType se establece en 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

13
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

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:

14
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.

C L A S E S D ATA R E A DE R Y D ATA A D A P T E R

DESCRIBIR PARA QUÉ SE UTILIZAN

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.

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

15
realizar en los datos del objeto DataSet en los datos correspondientes de
la fuente de datos asociada.

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():

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.

16
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,

17
C L A S E S D ATATA B LE , D ATA S E T Y D ATAV IE W

DESCRIBIR SU FUNCIONALIDAD Y LA RELACIÓN QUE EXISTE ENTRE


ELLAS

Como se ha mencionado con anterioridad, el objeto DataSet


representa los datos obtenidos desde una fuente de datos en memoria.

El objeto DataTable representa una tabla de datos en memoria.

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.

El objeto 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.

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 los métodos del objeto
DataTable que corresponda AcceptChanges (para aceptar los cambios) o
RejectChanges (para rechazarlos).

18
Si AllowDelete tiene el valor 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

Referencias utilizadas:

Librería MSDN para DataSet, DataView y DataTable

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

Artículo en BeanSoftware sobre los objetos DataSet y DataAdapter

http://www.beansoftware.com/ASP.NET-Tutorials/DataSet-
DataAdapter.aspx

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

http://www.elguille.info/colabora/NET2005/perxi_introadonet.htm

19

También podría gustarte