Professional Documents
Culture Documents
Un formulario Windows, para acceder a los datos de un origen de datos lo puede realizar de dos modos:
- Conectado. Interactuando directamente con la base de datos.
- Desconectado. Utilizando un adaptador de datos para leer la informacin de la base de datos y
almacenarla en el conjunto de datos (DataSet). Posteriormente, cuando se requiera escribir en el
origen de datos, se volver a utilizar el adaptador, que tomar los datos del conjunto de datos
(DataSet).
ADO.NET y Windows Forms proporcionan otros componentes que se pueden utilizar para mostrar los
datos. Incluyen controles como DataView, DataGrid, que pueden ser enlazados a datos, y propiedades
de enlace a datos en la mayora de controles estndares de Windows, como los controles TextBox,
Label, ComboBox y ListBox.
Vista de datos.
La clase DataView permite representar los datos de la clase DataTable (de una tabla), creando
mltiples vistas de los mismos, puesto que permite editar, ordenar y filtrar, buscar y navegar por un
conjunto de datos determinado.
Existe una clase DataAdapter para cada proveedor de datos: OleDbDataAdapter, SqlDataAdapter, etc.
Generalmente, cada adaptador de datos, intercambia datos entre una sola tabla del origen de datos y un
solo objeto DataTable del conjunto de datos. Lo normal es utilizar tantos adaptadores como tablas tenga
el conjunto de datos. De esta forma, cada tabla del conjunto de datos tendr su correspondiente tabla en
el origen de datos.
A partir de la versin Visual Studio 2005 aparecen los objetos TableAdapter. Se pueden pensar en un
TableAdapter como un DataAdapter que lleva integrado un objeto de conexin y la capacidad de
contener varias consultas.
En resumen. El DataAdapter conecta el DataSet con el origen de datos. Esta conexin la establece a
travs de los comandos (objetos Command):
- De Seleccin, para obtener datos de la base de datos.
SELECT * FROM Tabla
- De Accin, para actualizar datos en la base de datos
Insercin INSER INTO .....
Eliminacin DELETE ...
Actualizacin UPDATE .....
2
Para poder realizar estas operaciones de conexin con el origen de datos, DataAdapter dispone de 4
propiedades a las que les asigna cada uno de estos 4 comandos:
'Crea un DataAdapter
Dim da As OleDbDataAdapter
da = New OleDbDataAdapter
'lo conecta
Dim Cmd As New OleDbCommand(Select * From Tabla, Cn)
da.SelectCommand = Cmd
El DataAdapter no slo conecta el origen de datos (BD) con el conjunto de datos (DataSet) si no que
permite cargar o llenar el DataSet con los datos correspondientes desde el origen de datos. Para ello
dispone del mtodo Fill, que ejecuta el comando de seleccin y carga los datos en el DataSet.
El mtodo Fill crea en el DataSet una tabla con el nombre asignado en su 2 argumento
Se suele utilizar un DataAdapter por cada tabla del conjunto de datos (DataSet)
Para actualizar la BD con la informacin del DataSet, DataAdapter dispone del mtodo Update.
Cuando se ejecuta este mtodo, DataAdapter revisa todas las filas de la tabla del DataSet, comprobando
si cada una de ellas ha sido modificada, aadida o eliminada y ejecuta el comando de accin
correspondiente para modificar, aadir o eliminar esa fila del origen de datos.
Mtodos:
Fill. Agrega o refresca filas en un DataSet con los datos procedentes de un DataAdapter. Devuelve un
Integer con el n de filas afectadas.
FillSchema. Agrega una DataTable al DataSet con la estructura de la tabla con sus claves, etc. No las
relaciones.
Update. Actualiza la fuente de datos mediante los comandos de Accin. Solo escribe las
modificaciones (filas que han variado su contenido).
3
Como se ha visto anteriormente, en una tabla del DataSet cada fila contiene un estado. Al cargar el
DataSet se asigna a cada fila del DataTable el estado sin cambios. A medida que se van realizando
operaciones con las filas, a cada fila actualizada se le asigna el valor correspondiente a la operacin
realizada con ella: aadida, modificada o eliminada.
El DataSet y sus objetos disponen de un conjunto de mtodos que permiten actualizar o conocer el
estado de las filas de cada una de sus tablas.
La clase DataRow tiene la propiedad RowState, que permite saber si la fila cambi y de qu modo,
desde que la DataTable se carg por primera vez. Alguno de sus valores puede ser:
- Added
- Deleted
- Modified
- Unchanged.
Propiedades de DataSet
CaseSensitive. Propiedad que indica si las comparaciones de texto dentro de las tablas distinguen entre
maysculas y minsculas. Por defecto tiene el valor False.
DataSetName. Establece o devuelve mediante una cadena de texto el nombre del objeto DataSet.
HasErrors. Devuelve un valor lgico para indicar si existen errores dentro de las tablas del DataSet.
Relations. Esta propiedad devuelve una coleccin de objetos DataRelation, que representan todas las
relaciones existentes entre las tablas del objeto DataSet.
Tables. Devuelve una coleccin de objetos DataTable, que representan a cada una de las tablas
existentes dentro del objeto DataSet.
Mtodos
Clear. Elimina todos los datos almacenados en el objeto DataSet, vaciando todas las tablas contenidas
en el mismo. No borra las tablas
AcceptChanges. Pone el estado de las filas a Sin Cambios.
Las clases DataRow y DataTable tambin tienen mtodos AcceptChanges. Si se llama a
AcceptChanges en el nivel de DataTable, se llama al mtodo AcceptChanges para cada
DataRow. De igual forma, si se invoca a AcceptChanges en DataSet, se llama a
AcceptChanges en cada una de las tablas de DataSet. De esta forma, se puede invocar el
mtodo desde varios niveles. Al llamar al mtodo AcceptChanges de DataSet, se permite
4
invocar el mtodo en todos los objetos subordinados (por ejemplo, tablas y filas) con slo
una llamada.
Cuando se llama a AcceptChanges en DataSet, cualquier objeto DataRow que an se
encuentre en modo de edicin finalizar correctamente sus modificaciones. La propiedad
RowState de cada DataRow tambin cambia; las filas Added y Modified se convierten en
Unchanged y se quitan las filas Deleted.
GetChanges. Devuelve un nuevo objeto DataSet con todas las tablas y slo las filas que hayan tenido
cambios.
HasChanges. Devuelve true o false para indicar si se han realizado cambios al contenido del DataSet
desde que fue cargado o bien desde que se realiz la ltima llamada al mtodo
AcceptChanges.
RejectChanges. Abandona todos los cambios realizados en las tablas contenidas en el objeto DataSet
desde que fue cargado el objeto o bien desde la ltima vez que se lanz el mtodo
AcceptChanges.
Merge. Toma los contenidos de un DataSet y los mezcla con los de otro DataSet, de forma que
contendr los datos de ambos objetos DataSet.
5
Procedimientos
El procedimiento para obtener un conjunto de datos (Cargar un DataSet) a travs de un DataAdapter
es el siguiente:
'Crea un Adaptador
da = New OleDbDataAdapter
- Llenado de una tabla (DataTable) del DataSet a travs del conector DataAdapter
El mtodo Fill del DataAdapter crea en el DataSet una tabla con el nombre
asignado en su 2 argumento. Esa DataTable se carga con los datos del
DataAdapter.
Ejemplo. Crear un DataSet con la tabla Authors de Biblio.mdb y mostrar los autores en un
DataGrid. Utilizando un DataAdapter
Imports System.Data.OleDb
Public Class Form1
Inherits System.Windows.Forms.Form
Public Class Form1
Inherits System.Windows.Forms.Form
...
'Declarar los objetos: conexion, DataSet y DataAdapter
Dim Cn As OleDbConnection
Dim ds As DataSet
Dim da As OleDbDataAdapter
'Crea Adaptador
da = New OleDbDataAdapter
'Crea el DataSet
ds = New DataSet
Call CargarDatos()
End Sub
Ejercicio. Aadir nuevas filas escribiendo el usuario el nombre y ao de nacimiento del autor.
Partiendo del ejemplo anterior. Aadir un botn para grabar la nueva fila y dos cajas de texto
para poder escribir el nombre y ao de nacimiento del autor.
'Crea Adaptador
da = New OleDbDataAdapter
'Crea el DataSet
ds = New DataSet
Call CargarDatos()
End Sub
'ejecuta el comando
Cn.Open()
NReg = da.InsertCommand.ExecuteNonQuery
Cn.Close()
Call CargarDatos()
Catch ex As Exception
MsgBox(ex.ToString)
End Try
End Sub
Para las operaciones de navegacin por la tabla es obtener del DataSet, la tabla que
necesitamos mediante su coleccin Tables, y a su vez, a la coleccin Rows de esa tabla,
pasarle el nmero de fila/registro al que vamos a desplazarnos. Es decir:
'2 parmetro
Par = .CreateParameter
.Parameters.Add(Par)
.Parameters(1).SourceColumn = "Year Born"
End With