Está en la página 1de 7

1. Bases de datos desde VB.

Net
1.1 Introduccin.

Desde Vb Net 2005 se puede acceder a las siguientes bases de datos, utilizando las clases adecuadas.
Oracle
SQL Server
Access
Las que se puedan acceder a travs de ODBC
Cualquier base de datos que pueda ser accesible desde la clase genrica DataBase.

En ste apartado nos vamos a centrar en Access, pero hay que tener presente que la diferencia en el
acceso a una base de datos solo cambia por la clase de origen que se utiliza en el uso de la misma, ya que los
objetos a utilizar son bsicamente los mismos.
Los cambios en esta versin con respecto a la seis son considerables, hasta el punto que casi
podramos decir que sirve de poco lo que sabamos de la versin anterior. Por lo tanto quizs sea buena idea
hacer como un reset y no pensar en el como lo hacamos antes, pues posiblemente ganemos tiempo.
El primer cambio viene en el nmero de objetos disponibles para el manejo de la base de datos, que son
ms, y conviene comprender el destino de cada uno, para facilitar las cosas.
Otro apartado es que ahora la filosofa pasa por acceder a la base de datos y cerrar la conexin, lo cual
tiene la ventaja de descargar de recursos al servidor, y as este gana en prestaciones y recursos disponibles.
En Vb Net hay que, o se puede contemplar dos escenarios distintos.
Uno en el que el acceso a los datos se hace directamente a la base de datos, otro en el que el acceso se
hace solo al inicio del programa para obtener el subconjunto de la base de datos necesario para el programa
que se est ejecutando en ese momento, para luego al final hacer una actualizacin con los cambios realizados
en la base de datos, este proceso de actualizacin lo gestionan los mtodos que incorpora la clase que
gestiona el acceso a la base de datos.
El acceso a la base de datos se realiza siempre mediante instrucciones SQL, no se dispone de mtodos
de acceso para leer o grabar, como en la versin anterior.
Las relaciones de integridad se definen en la base de datos, y se captura el error en el programa para la
gestin de las mismas.
El enfoque de est documentacin se aparta del uso de los asistentes de Vb Net 2005, por lo que no
haremos uso de los mismos.

1.2 Las clases.

Cada base de datos dispone de una clase especializada en el manejo de la misma.


Oracle
SQL
Access
Odbc
Genrico

OracleClient
SQLClient
OleDb
ODBC
DB

Y estas clases estn disponibles en el espacio de nombres System.Data.


Como vamos a centrarnos en Access, la clase que utilizaremos ser OleDb.

1.3 Los objetos.

Podemos clasificarlos o agruparlos en


Conexin.
Almacenamiento.
Visualizacin.
Otros.

1.3.1 Conexin.

El objeto de conexin en Access es el OleDbConnection.


Permite definir los datos necesarios para acceder a cada tipo de base de datos.

Otro objeto de conexin, es el DataAdapter.


Este objeto permite realizar el acceso a la base de datos para el intercambio de informacin en los dos
sentidos, digamos que gestiona los datos entre la base de datos y la aplicacin a partir de los datos facilitados
en la conexin.
Pertenece a System.Data.oleDb.OleDbDataAdapter.
Cada objeto de almacenamiento debe tener un objeto DataAdapter asignado, pues es el que a travs del
cual puede hacerse luego el proceso de actualizacin.

1.3.2 Almacenamiento.

Los objetos de almacenamiento son


DataReader
DataTable
DataSet
DataRow

System.Data.OleDb.OleDbDataReader
System.Data.DataTable
System.Data.DataSet
System.Data.DataRow

Como podemos observar el objeto DataReader pertenece al espacio de nombres OleDb mientras que los
dems pertenecen a System.Data.
El objeto DataReader es un objeto gil y que esta especializado en almacenar datos para solo lectura, lo
que le quita la gestin de las actualizaciones y le permite ser ms rpido en los accesos a los datos de la base
de datos.
El objeto DataTable, es lo ms parecido a una tabla de la base de datos, dispone de la posibilidad de
definir clave primaria de uno o varios campos.
El DataTable puede ser la imagen de una tabla de la base de datos, o puede ser el resultado de una
SQL que combine varias tablas en la SQL, o tabla virtual si queremos llamarla as.
Este objeto en el uso del DataSet es usado como parte del DataSet.
El objeto DataSet es lo que hemos dado en llamar antes un subconjunto de la base de datos de nuestra
aplicacin.
Al iniciar el programa se carga con aquellos datos que sean necesarios para el mismo, se cierra la
conexin y luego se realiza la actualizacin de los datos en la base de datos con los cambios que hayan habido
en el programa.
El DataSet no puede formar parte de un DataTable.
El objeto DataRow, lo hemos incorporado como elemento de almacenamiento, aunque hace referencia a
una fila, registro de la base de datos, porque hemos comprobado lo til que llega a ser el uso del mismo, y al fin
y al cabo almacena datos, un registro, pero datos.

1.3.3 Visualizacin.

Los objetos de visualizacin puede ser cualquiera de los que tenemos disponibles en el entorno de
programacin.
Lo importante aqu es como utilizarlos a la hora de visualizar los datos de nuestra fuente de
almacenamiento.
2

Podramos hablar de dos posibilidades.


Asignacin clsica de los datos, o enlazarlos a nuestra fuente de datos.
Las dos son vlidas evidentemente, pero hay que ver la practicidad.
El enlazado de un DataDrid a nuestro DataTable es comodsimo, pues se encarga de representar los
datos que vamos incluyendo en la tabla, sea la origen o una virtual.
El enlazado de un TextBox a un objeto crea el mismo cdigo que hacer una asignacin manual o clsica,
por lo que ...

1.3.4 Otros.

Estos objetos pueden ser


BindingSource
CommandBuilder
Command

BindingSource
System.OleDb.OleDbCommandBuilder
System.OleDb.OleDbCommand

BindingSource, este objeto es el que hace de puente entre aquellos objetos que no disponen de la
propiedad DataSource y el objeto fuente de los datos.
CommandBuilder, este genera de forma automtica cdigo SQL para las opciones Insert, Update y
Delete, tanto para el uso normal, como para cuando se utiliza el DataAdapter en el entorno de un DataSet.
Command, sirve para indicar, almacenar y ejecutar cuando proceda, la instruccin SQl, sea almacenada
o incrustada, para un objeto DataReader o DataAdapter.
Tiene dos formatos de utilizacin,
ExecuteNonQuery se ejecuta y no devuelve datos, borrado por ejemplo.
ExecuteReader se ejecuta y devuelve una coleccin de datos que se asignan a un objeto.

2. Conexin.
2.1 Introduccin.

La conexin a la base de datos se realiza a travs de un objeto especfico, lo cual permite que cada tipo
de base de datos posea un objeto especializado en la misma, y se facilite dicha tarea.
Cada base de datos posee un juego distinto de parmetros para su acceso, por lo tanto esto facilita
dicho proceso.
El objeto de conexin en Access es el OleDbConnection.
Adems existe la clase
System.Data.OleDb.OleDbConnectionStringBuilder
Que permite aadir a una coleccin todos los datos necesarios para la configuracin de la conexin, hay
que tener presente que el uso de parmetros no necesarios puede generar error, como por ejemplo el de
contrasea si la base de datos no la tiene.

2.2 OledbConnection.

Este es un ejemplo de cmo puede ser la configuracin del acceso a la base de datos.
Hay dos pasos, la generacin de la cadena de conexin, y la prueba de la disponibilidad de la base de
datos, forzando un open y close de la misma para su control.
En el ejemplo el objeto Conexin es del tipo OleDBConnection, y se supone declarado a nivel de
aplicacin.
Public Conexion As New System.Data.OleDb.OleDbConnection
Public Sub CadenaConexion( _
ByRef CadConex As System.Data.OleDb.OleDbConnectionStringBuilder, _
ByVal Ruta As String)
CadConex.ConnectionString = Ruta
' Aadir el nombre de cada parmetro y el valor que se le asigna.
CadConex.Add("Provider", "Microsoft.Jet.Oledb.4.0")
' Password de la base de datos, si lo tiene.
CadConex.Add("Jet OLEDB:Database Password", "password")
' Informacin para el grupo de trabajo.
CadConex.Add("Jet
OLEDB:System
Database",
"C:\Archivos
programa\Microsoft Office\Office\System.mdw")
Este es necesario
CadConex.Add("Jet OLEDB:Database Locking Mode", 1)
End Sub

de

La cadena de conexin que se ha generado se devuelve como un objeto del tipo


OleDbConnectionStringBuilder, que despus se asigna como cadena a la propiedad ConnectionString del
objeto OleDbConnection.
En el siguiente procedimiento se procede a realizar la configuracin del objeto asignando esta cadena,
pero se ha optado por hacer la prueba de disponible de la base de datos, devolviendo el dato Status a false
cuando la base de datos ha podido ser abierta sin error.

Public Sub ConfigurarConexion( _


ByRef Conexion As System.Data.OleDb.OleDbConnection, _
ByRef Status As Boolean)
Dim CadConex As New System.Data.OleDb.OleDbConnectionStringBuilder
Dim Ruta As String
Status = False
Ruta = "Data source=C:\Visual2005\" & NomBaseDatos
CadenaConexion(CadConex, Ruta)
Conexion.ConnectionString = CadConex.ConnectionString
Try
Conexion.Open()
Conexion.Close()
Catch ex As OleDbException
MsgBox("Fall la conexin con la base de datos",
MsgBoxStyle.Information)
Status = True
End Try
End Sub

Tras la ejecucin de ste procedimiento, el objeto Conexin queda configurado y probada la


disponibilidad de la base de datos, por lo que despus ya se puede abrir la conexin en cada momento que sea
preciso en la aplicacin.
Toda la informacin referente a ste objeto la podemos encontrar en el siguiente link.
http://msdn2.microsoft.com/es-es/library/system.data.oledb.oledbconnection(VS.80).aspx

2.3 OleDbDataAdapter.

Este objeto permite realizar el acceso a la base de datos para el trasiego de informacin en los dos
sentidos, digamos que gestiona los datos entre la base de datos y la aplicacin a partir de los datos facilitados
en la conexin.
Pertenece a System.Data.oleDb.OleDbDataAdapter.
Su definicin es
Dim Adaptador As System.Data.OleDb.OleDbDataAdapter
En el ejemplo que sigue se utiliza la carga de un DataGrid que se enlaza a la tabla que se crea en el
procedimiento.
Como objeto de almacenamiento se utiliza un DataTable.
En el procedimiento se crea una restriccin en la tabla para a posteriori controlar las duplicidades de los
datos en la misma y capturar el error.
Private Sub CargaDataGrid( _
ByVal Conexion As System.Data.OleDb.OleDbConnection, _
ByRef Adaptador As System.Data.OleDb.OleDbDataAdapter, _
ByRef EnlaceTabla As BindingSource, _
ByRef ObjDataGrid As DataGridView)
Dim Cliente As ItemLista = CType(Lista02.SelectedItem, ItemLista)
Dim CadenaSql As String
' Se deshace de los datos anteriores
Tabla = New DataTable
5

CadenaSql = "SELECT PublicClientes.TipPub as Tipo , " & _


"PublicClientes.CodPub as Codigo , " & _
"Titulos.Titulo as Denominacin , " & _
"PublicClientes.Cant as Cantidad " & _
"FROM PublicClientes " & _
"INNER JOIN Titulos ON " & _
"(PublicClientes.CodPub = Titulos.Codigo) AND & _
(PublicClientes.TipPub = Titulos.TipPub) " & _
"WHERE (((PublicClientes.TipCli)=' " & _
Cliente.Codigo.ToString "') AND & _
((PublicClientes.CodCli)='" & Cliente.Codig2.ToString & "')); "
Try
' Crear un nuevo adaptador de datos
Adaptador = New OleDb.OleDbDataAdapter(CadenaSql, Conexion)
' Llenar la tabla con los datos y enlazarza con el 'bindingsource'
Adaptador.Fill(Tabla)
' Se define la restriccin
CrearRestriccion(Tabla)
' Se enlaza el objeto
ObjDataGrid.DataSource = EnlaceTabla
EnlaceTabla.DataSource = Tabla
Catch ex As OleDb.OleDbException
MsgBox(ex.Message, MsgBoxStyle.Information)
End Try
End Sub
En el ejemplo que sigue vemos un ejemplo en el que se cargan datos, pero no es necesario el uso de un
DataAdapter para la captura de los datos.
Como objeto de almacenamiento se usa un DataReader.
Adems aparece el uso de una clase que se usa para insertar objetos en el ListBox, y facilitar la gestin
del apartado de cdigos de los datos del ListBox.
Public Sub CargaListaClientes( _
ByRef Lista As ListBox, _
ByVal Conexion As System.Data.OleDb.OleDbConnection, _
ByVal Tipo As String)
Dim CadenaSQL As String
Dim Comando As New System.Data.OleDb.OleDbCommand
Dim Reader As System.Data.OleDb.OleDbDataReader
Dim Objeto As ItemLista
Lista.Items.Clear()
CadenaSQL = "Select Tipo, Codigo, RazonSocial " & _
"From Clientes " & _
"Where Tipo = '" & Tipo & "' " & _
"Order By RazonSocial"
Try
' Abrir la base de datos.
Conexion.Open()
' Contenido del comando
Comando.CommandText = CadenaSQL
' Tipo de comando a ejecutar
Comando.CommandType = CommandType.Text
' Conexin a utilizar, configurada previamente.
Comando.Connection = Conexion
' Ejecucin de SQL
Reader = Comando.ExecuteReader
6

Try
' Control y lectura
While Reader.Read
Objeto = New ItemLista(Trim(Reader.Item("RazonSocial").ToString), _
Reader.Item("Tipo").ToString, _
Reader.Item("Codigo").ToString)
Lista.Items.Add(Objeto)
End While
Catch ex As OleDb.OleDbException
MsgBox(ex.Message, MsgBoxStyle.Information, "Leer reader")
End Try
Catch Ex As OleDb.OleDbException
MsgBox(Ex.Message, MsgBoxStyle.Information, "Crear reader")
End Try
Conexion.Close()
End Sub
Toda la informacin referente a ste objeto la podemos encontrar en el siguiente link.
http://msdn2.microsoft.com/es-es/library/system.data.oledb.oledbdataadapter(VS.80).aspx
Como hemos podido comprobar la conexin se configura mediante el objeto OleDbConnection, pero lo
que es la tarea posterior de gestin de los datos podemos efectuarla de dos formas distintas, mediante el uso
del DataAdapter o mediante el formato del uso del DataReader.
Cada uno tiene un escenario distinto.

2.4 Clave principal.

En toda tabla que se precie, existe una clave principal, de uno o varios campos.
Dicha gestin se puede hacer a dos niveles, DataAdapter o DataTable.
Con el DataAdapter la gestin de la clave principal se puede hacer de la siguiente forma.
' Asignacin del comando al objeto adapter.
AdapAlbCa.SelectCommand = Comando
' LLenar la tabla
Try
' Limpiar la tabla, solo si procede
ObjDataSet.Tables("AlbCab").Rows.Clear() ' limpia la tabla
Catch ex As NullReferenceException
Finally
' Capturar el esquema de la clave principal desde la tabla origen
AdapAlbCa.FillSchema(Tabla, SchemaType.Source)
' LLenar la tabla
AdapAlbCa.Fill(Tabla)
End Try

Esta es cmoda y efectiva.


El sistema del DataTable se puede reservar para las tablas de trabajo que se crean en tiempo de
ejecucin.

También podría gustarte