Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Net
1.1 Introducción.
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 través de ODBC
Cualquier base de datos que pueda ser accesible desde la clase genérica 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 básicamente los mismos.
Los cambios en esta versión con respecto a la seis son considerables, hasta el punto que casi
podríamos decir que sirve de poco lo que sabíamos de la versión anterior. Por lo tanto quizás sea buena idea
hacer como un reset y no pensar en el como lo hacíamos antes, pues posiblemente ganemos tiempo.
El primer cambio viene en el número de objetos disponibles para el manejo de la base de datos, que son
más, y conviene comprender el destino de cada uno, para facilitar las cosas.
Otro apartado es que ahora la filosofía pasa por acceder a la base de datos y cerrar la conexión, lo cual
tiene la ventaja de descargar de recursos al servidor, y así este gana en prestaciones y recursos disponibles.
El acceso a la base de datos se realiza siempre mediante instrucciones SQL, no se dispone de métodos
de acceso para leer o grabar, como en la versión anterior.
Las relaciones de integridad se definen en la base de datos, y se captura el error en el programa para la
gestión de las mismas.
El enfoque de está documentación se aparta del uso de los asistentes de Vb Net 2005, por lo que no
haremos uso de los mismos.
Oracle OracleClient
SQL SQLClient
Access OleDb
Odbc ODBC
Genérico DB
Conexión.
Almacenamiento.
Visualización.
Otros.
1.3.1 Conexión.
El objeto de conexión en Access es el OleDbConnection.
Permite definir los datos necesarios para acceder a cada tipo de base de datos.
DataReader System.Data.OleDb.OleDbDataReader
DataTable System.Data.DataTable
DataSet System.Data.DataSet
DataRow System.Data.DataRow
Como podemos observar el objeto DataReader pertenece al espacio de nombres OleDb mientras que los
demás 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 gestión de las actualizaciones y le permite ser más rápido en los accesos a los datos de la base
de datos.
El objeto DataTable, es lo más 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
aplicación.
Al iniciar el programa se carga con aquellos datos que sean necesarios para el mismo, se cierra la
conexión y luego se realiza la actualización 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 Visualización.
Los objetos de visualización puede ser cualquiera de los que tenemos disponibles en el entorno de
programación.
Lo importante aquí es como utilizarlos a la hora de visualizar los datos de nuestra fuente de
almacenamiento.
2
Podríamos hablar de dos posibilidades.
Asignación clásica de los datos, o enlazarlos a nuestra fuente de datos.
Las dos son válidas evidentemente, pero hay que ver la practicidad.
El enlazado de un DataDrid a nuestro DataTable es comodísimo, 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 código que hacer una asignación manual o clásica,
por lo que ...
1.3.4 Otros.
Estos objetos pueden ser
BindingSource BindingSource
CommandBuilder System.OleDb.OleDbCommandBuilder
Command 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 automática código 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 instrucción SQl, sea almacenada
o incrustada, para un objeto DataReader o DataAdapter.
Tiene dos formatos de utilización,
3
2. Conexión.
2.1 Introducción.
La conexión a la base de datos se realiza a través de un objeto específico, 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 parámetros para su acceso, por lo tanto esto facilita
dicho proceso.
El objeto de conexión en Access es el OleDbConnection.
Además existe la clase
System.Data.OleDb.OleDbConnectionStringBuilder
Que permite añadir a una colección todos los datos necesarios para la configuración de la conexión, hay
que tener presente que el uso de parámetros no necesarios puede generar error, como por ejemplo el de
contraseña si la base de datos no la tiene.
2.2 OledbConnection.
Este es un ejemplo de cómo puede ser la configuración del acceso a la base de datos.
Hay dos pasos, la generación de la cadena de conexión, y la prueba de la disponibilidad de la base de
datos, forzando un open y close de la misma para su control.
CadConex.ConnectionString = Ruta
' Añadir el nombre de cada parámetro 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")
' Información para el grupo de trabajo.
CadConex.Add("Jet OLEDB:System Database", "C:\Archivos de
programa\Microsoft Office\Office\System.mdw")
‘ Este es necesario
CadConex.Add("Jet OLEDB:Database Locking Mode", 1)
End Sub
En el siguiente procedimiento se procede a realizar la configuración 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.
4
Public Sub ConfigurarConexion( _
ByRef Conexion As System.Data.OleDb.OleDbConnection, _
ByRef Status As Boolean)
Try
Conexion.Open()
Conexion.Close()
Catch ex As OleDbException
MsgBox("Falló la conexión con la base de datos", _
MsgBoxStyle.Information)
Status = True
End Try
End Sub
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 información en los dos
sentidos, digamos que gestiona los datos entre la base de datos y la aplicación a partir de los datos facilitados
en la conexión.
Pertenece a System.Data.oleDb.OleDbDataAdapter.
Su definición es
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 restricción en la tabla para a posteriori controlar las duplicidades de los
datos en la misma y capturar el error.
5
CadenaSql = "SELECT PublicClientes.TipPub as Tipo , " & _
"PublicClientes.CodPub as Codigo , " & _
"Titulos.Titulo as Denominación , " & _
"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 restricción
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.
Además aparece el uso de una clase que se usa para insertar objetos en el ListBox, y facilitar la gestión
del apartado de códigos de los datos del ListBox.
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
http://msdn2.microsoft.com/es-es/library/system.data.oledb.oledbdataadapter(VS.80).aspx
Como hemos podido comprobar la conexión se configura mediante el objeto OleDbConnection, pero lo
que es la tarea posterior de gestión 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.