Bases de Datos en VB.Net

Anuncio
IES Fco. De Quevedo Desarrollo de Aplicaciones Informáticas
Visual Basic Net – Bases de Datos en VB.Net
Bases de Datos en VB.Net
2007 Justo Sáez Arenas
http://vb.jsaez.com/
Contenidos:
Introducción.............................................................................................................................. 2
Herramientas visuales............................................................................................................... 2
Conexión................................................................................................................................... 2
Adaptador de Datos...................................................................................................................3
Conjunto de Datos.....................................................................................................................3
Enlazado de Controles y Datos................................................................................................. 4
Utilización conjunta de controles enlazados a datos.................................................................4
Moverse por los registros.......................................................................................................... 4
Otras propiedades del Control DataGrid...................................................................................5
Propiedades y métodos del DataSet.......................................................................................... 6
Consultar un campo de un registro............................................................................................6
Recorrer el DataSet................................................................................................................... 6
Añadir Registros........................................................................................................................7
Editar Registros.........................................................................................................................7
Eliminar Registros.....................................................................................................................8
Actualizar los datos origen........................................................................................................9
Buscar datos.............................................................................................................................. 9
Visual Basic .Net _ Bases de Datos en VB.Net -
1
IES Fco. De Quevedo Desarrollo de Aplicaciones Informáticas
Visual Basic Net – Bases de Datos en VB.Net
1. Bases de datos.
Introducción.
El nuevo estándar de Microsoft para utilizar bases de datos se denomina ‘ADO.NET’, de Access
Data Object. Este estándar es común a toda la plataforma .net e interiormente trabaja con
formato de datos XML, lo que hace más sencilla la utilización de fuentes de datos XML existentes
y la utilización de ADO.NET en programas diseñados para Internet.
La característica fundamental para trabajar con bases de datos es la utilización de un Dataset o
conjunto de datos que se extrae de la base de datos que deseamos utilizar.
Este Dataset será proporcionado por el sistema gestor de base de datos.
La forma de trabajo sigue la siguiente secuencia:
 Conexión. Se establece la conexión a la correspondiente base de datos.
 Adaptador de Datos. Que nos sirve para enviar y recibir los datos.
 Conjunto de Datos. Con los que se desea trabajar en el programa. En realidad no se
trabaja con los datos reales, sino una copia de los mismos.
Herramientas visuales
Explorador de servidores.
Contiene todas las herramientas básicas para asociar bases de datos y manipular sus objetos.
Permite establecer conexiones con fuentes de datos basadas en Internet, cliente-servidor o
locales.
Generador de consultas.
Nos sirve para generar consultas SQL.
Diseñador de bases de datos.
Nos permite trabajar con una base de datos completa, pudiendo crear y modificar sus tablas.
1. Trabajar con Bases de Datos.
A continuación indicamos los pasos para una conexión a una base de datos Access.
Conexión.
Mediante el Explorador de Servidores, (Menú Ver- Explorador de Servidores), pulsaremos sobre
el botón
‘Conectar con Base de datos’ 1el cual nos mostrará la siguiente pantalla donde
indicaremos los datos necesarios para establecer la conexión.
Como Proveedores, nos aparecerá el listado de gestores de bases de datos instalados en el
sistema. Normalmente Visual Studio .net instala los más comunes. Y otras veces es el propio
sistema gestor que lo instala.
1
También se accede a esta pantalla , mediante Menú Herramientas – Conectar con base de datos.
Visual Basic .Net _ Bases de Datos en VB.Net -
2
IES Fco. De Quevedo Desarrollo de Aplicaciones Informáticas
Visual Basic Net – Bases de Datos en VB.Net
Para bases de datos access elegiremos ‘Microsoft Jet 4.0
OLE DB’
El siguiente paso es seleccionar la base de datos (.mdb) a
utilizar. Se selecciona y se puede ‘probar la conexión’ para
estar seguros que se ha establecido correctamente.
Si todo va bien, aparecerá en el ‘Explorador de Servidores’
un nuevo nodo de conexión de datos, desde el podemos
explorar la estructura de tablas y demás componentes de
nuestra base de datos elegida.
Con ello tendremos establecida la conexión.
Adaptador de Datos.
El siguiente paso consiste en la creación del adaptador de datos. Para ello tenemos dos métodos:
• Arrastrar el componente deseado a nuestro formulario. Por ejemplo si deseamos utilizar
una tabla al completo.
• Utilizar el control OleDbDataAdapter de las herramientas de Datos, que es un asistente
que nos permitirá detallar más aspectos de los datos que deseamos utilizar. Nos guiara en
los pasos para realizar la selección de datos, pudiendo utilizar el Generador de consultas
SQL.
Conjunto de Datos.
Una vez que tenemos los datos con los que deseamos trabajar, deberemos crear un objeto que
represente dichos datos, que es lo que conocemos como Dataset.2
Mediante Menú Datos-Generar conjunto de datos,
Se puede dar un nombre al conjunto de datos nuevo o
utilizar uno nuevo existente.
En la carpeta donde se ubica la aplicación se creará un
fichero con extensión ‘.xsd’, que es un esquema XML
de datos.
Con estos pasos ya tenemos disponibles los datos para
poder ser utilizados con los controles que necesitemos
en nuestra aplicación.
2
Existe otro control llamado DataReader, que permite leer datos de forma similar pero para cuando necesitamos
consultas mas puntuales y que no necesitan de una conexión tan constante a la fuente de datos.
Visual Basic .Net _ Bases de Datos en VB.Net -
3
IES Fco. De Quevedo Desarrollo de Aplicaciones Informáticas
Visual Basic Net – Bases de Datos en VB.Net
Enlazado de Controles y Datos
Una vez que tenemos el Dataset, podemos enlazar dichos datos a los controles que lo permitan,
como por ejemplo TextBox, mediante la categoría DataBindings y en su propiedad Text,
especificar el campo al que se desea enlazar.
Para utilizar los datos se deberá escribir el código pertinente para su carga, consiste en dos
líneas:
Nombre_DataSet.Clear()
Nombre_Adaptador.Fill(Nombre_DataSet)
‘Para que no se acumulen datos.
‘Carga los datos al Adaptador.
Existe un objeto CurrencyManager, para cada DataSet, que nos permitirá saber el registro actual
y el número total de registros.
Cada Formulario tiene un objeto BindgContext, que guarda información de todos los objetos
CurrencyManager.
Enlazado de un Texbox.
Modificar la propiedad Databindings, Text y elegir el campo en concreto.
Enlazado de un Listbox.
Propiedades a modificar:
• DataSource, elegimos la fuente de datos.
• DisplayMember, elegimos el campo por el que queremos cargar el ListBox.
Utilización conjunta de controles enlazados a datos.
Podemos hacer un sencillo programa de consulta de datos, utilizando un listbox que nos muestre
los datos por un determinado campo. Y al seleccionar uno de ellos, que se visualicen en sus
correspondientes Textbox, los datos de todos los campos correspondientes al seleccionado.
Esto se realiza de forma automática teniendo enlazado el Listbox y los demás Textbox al
conjunto de datos.
Moverse por los registros.
En el Formulario donde tenemos los controles enlazados al conjunto de datos, existe un objeto
llamado BindingContext al que especificando el conjunto de datos y la tabla correspondiente, nos
permitirá saber la posición y cantidad de registros de los que disponemos en el conjunto de datos.
BindingContext pertenece a la clase BundingManagerBase que se encarga de mantener
sincronizados todos los controles que están enlazados al mismo origen de datos.
Para ello tenemos las dos propiedades siguientes:
•
•
.position, que nos informa de la posición del registro activo en un momento dado. Hay
que tener en cuenta que la primera posición es la 0.
.count, que nos informa del número total de registros que tenemos en la tabla. Nos
servirá para saber la posición del último registro.
Visual Basic .Net _ Bases de Datos en VB.Net -
4
IES Fco. De Quevedo Desarrollo de Aplicaciones Informáticas
Visual Basic Net – Bases de Datos en VB.Net
Con estas propiedades nos bastará para movernos atrás, adelante, al primero y al último.
Por ejemplo, si tenemos un conjunto de datos llamado “Ds_Intructores” y una tabla el mismo
denominada “Instructores”, nos moveremos:
•
•
•
•
Al siguiente:
Me.BindingContext(Ds_Instructores, "Instructores").Position =
Me.BindingContext(Ds_Instructores, "Instructores").Position + 1
O mejor, utilizando el operador abreviado:
Me.BindingContext(Ds_Instructores, "Instructores").Position += 1
Al anterior:
Me.BindingContext(Ds_Instructores, "Instructores").Position -= 1
Al primero:
Me.BindingContext(Ds_Instructores, "Instructores").Position = 0
Al último:
Me.BindingContext(DS_Instructores, "Instructors").Position = _
Me.BindingContext(DS_Instructores, "Instructors").Count - 1
2. Uso del control DataGrid.
Tenemos el control Datagrid
columnas.
, que nos permite visualizar los datos en una rejilla de filas y
Básicamente consiste en colocar el control en el formulario donde tenemos establecida
previamente una conexión y un conjunto de datos y cambiar las siguientes propiedades del
DataGrid:
• .datasource, donde especificaremos el origen de los datos (el Dataset).
• .datamember, donde indicamos la tabla, consulta o elemento de la conexión del
conjunto de datos.
Una vez que tenemos enlazado el DataGrid correctamente, podemos hacer que el usuario pueda
realizar cambios y que estos se reflejen en la base de datos original. Para ello, utilizaremos los
siguientes propiedad y método:
• .readonly, propiedad del DataGrid que con valor a False permite que el usuario pueda
modificar los datos de la rejilla, aunque esto no implica que esos cambios se reflejen en
la base de datos original.
• .update, método del adaptador de datos que hace que se actualicen los cambios del
DataSet en la base de datos original. Tiene la siguiente sintaxis.
Nombre_Adaptador.Update(Nombre_Dataset)
Hay que tener en cuanta que hay ciertas operaciones como moverse por los
registros, que implican un .update automático.
Otras propiedades del Control DataGrid.
• AllowSorting. Propiedad boleana que especifica si el control permite ordenar los
registros por cualquiera de los campos, con la simple pulsación en el encabezado
correspondiente.
• PreferredColumnWidth y PreferredRowHeight. Especifican alto y ancho de filas y
columnas.
• ColumnHeaderVisible, bolean para mostrar u ocultar los encabezados.
Visual Basic .Net _ Bases de Datos en VB.Net -
5
IES Fco. De Quevedo Desarrollo de Aplicaciones Informáticas
Visual Basic Net – Bases de Datos en VB.Net
•
•
•
•
HeaderBackColor, HeaderForeColor y HeaderFont. Permiten cambiar las características
de los encabezados.
GridLineColor y GridLineStyle, permiten configurar las líneas de división la rejilla.
Autoformat. Nos permite seleccionar entre una serie de formatos de presentación
predeterminados. Para ello pulsamos con el botón derecho sobre el DataControl y
elegimos Formato Automático.
TableStyles. Nos permite editar una colección de estilos personalizados. Permitiendo
cambiar propiedades como:
o MappingName. Donde se debe especificar el campo adecuado de la tabla.
o GridColumnStyles. Es otra colección para personalizar el estilos de cada columna
de la tabla.
3. Utilización de los de datos mediante código.
Teniendo en cuenta que un DataSet está constituido de
acuerdo al espacio de nombres que se muestra en la
figura:
Podemos obtener la información que deseemos,
utilizando su correspondiente clase.
Propiedades y métodos del DataSet.
• .HasChanges,
• .Tables,
• Rows.
• Getchanges
• AcceptChanges.
• .Clear
• DataRowCollection,
Respecto a las operaciones de edición, debemos utilizar los miembros del objeto tabla del
DataSet. Una vez terminado el proceso de edición, actualizaremos el almacén de datos original
con el contenido del DataSet, empleando el DataAdapter.
Consultar un campo de un registro.
Para referirnos a un dato concreto de un registro, podemos utilizar la siguiente sintaxis:
Dataset.Tables(“NombreTabla”).Rows(NumReg).item(numCampo)
Recorrer el DataSet.
En el siguiente ejemplo3 se ofrece un sencillo ejemplo de creación de un objeto DataSet que
llenaremos con un DataAdapter. Una vez listo el DataSet, recorreremos los datos que contiene y
mostraremos valores de sus columnas en un ListBox.
' crear conexión
Dim oConexion As New SqlConnection()
oConexion.ConnectionString = "Server=(local);Database=Northwind;uid=sa;pwd=;"
3
Tomado de “Programación en Visual Basic.net”, L.M. Blanco, Ed. Eidos.
Visual Basic .Net _ Bases de Datos en VB.Net -
6
IES Fco. De Quevedo Desarrollo de Aplicaciones Informáticas
Visual Basic Net – Bases de Datos en VB.Net
' crear adaptador
Dim oDataAdapter As New SqlDataAdapter("SELECT * FROM Customers ORDER BY
ContactName", oConexion)
' crear conjunto de datos
Dim oDataSet As New DataSet()
oConexion.Open()
' utilizar el adaptador para llenar el dataset con una tabla
oDataAdapter.Fill(oDataSet, "Customers")
oConexion.Close()
' una vez desconectados, recorrer la tabla del dataset
Dim oTabla As DataTable
oTabla = oDataSet.Tables("Customers")
Dim oFila As DataRow
For Each oFila In oTabla.Rows
' mostrar los datos mediante un objeto fila
' cargamos un listbox con los datos de la fila
Me.ListBox1.Items.Add(oFila.Item("CompanyName") & _
" - " & oFila.Item("ContactName") & " - " & _
oFila.Item("Country"))
Next
Añadir Registros
En el siguiente ejemplo tenemos un DataSet llamado Instructores1, construido sobre una tabla
“Instructors” con un campo denominado “Instructor”.En el siguiente procedimiento se añade un
nuevo registro y se introduce un dato que se encuentra en un TextBox1.
Private Sub Btn_Nuevo_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Btn_Nuevo.Click
Dim oTabla As DataTable
oTabla = Instructores1.Tables("Instructors")
Dim NuevaFila As DataRow
' obtener un nuevo objeto fila de la tabla del dataset
NuevaFila = Instructores1.Tables("Instructors").NewRow
TextBox1.Text = ""
TextBox1.Enabled = True
TextBox1.Focus()
' asignar valor a los campos de la nueva fila
NuevaFila("Instructor") = TextBox1.Text
' añadir el objeto fila a la colección de filas de la tabla del dataset
oTabla.Rows.Add(NuevaFila)
End Sub
Editar Registros
Para editar los datos de un DataSet, no tenemos más que asignar los nuevos valores a su
correspondiente campo del DataRow.
Private Sub btnModificar_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btnModificar.Click
dim reg_activo as integer
Visual Basic .Net _ Bases de Datos en VB.Net -
7
IES Fco. De Quevedo Desarrollo de Aplicaciones Informáticas
Visual Basic Net – Bases de Datos en VB.Net
Dim oDataRow As DataRow
' obtener el objeto fila de la tabla del dataset
' en el que estamos posicionados
reg_activo = Me.BindingContext(DS_Instructores, "Instructors").Position
oDataRow = Me.oDataSet.Tables("Clientes").Rows(reg_activo)
' modificar las columnas de la fila
' excepto la correspondiente al identificador cliente
oDataRow("Nombre") = Me.txtNombre.Text
oDataRow("FIngreso") = Me.txtFIngreso.Text
oDataRow("Credito") = Me.txtCredito.Text
End Sub
Eliminar Registros
Para elimnar registros tenemos el método .Delete,
Formato:
Nombre_ObjetoDataRow.Delete()
Ejemplo:
En el siguiente ejemplo vemos el código del botón Eliminar, dentro del cual, obtenemos la fila a
borrar mediante un objeto DataRow, procediendo a su borrado con el método Delete( ).
Para actualizar los borrados realizados, empleamos el método GetChanges() del objeto
DataTable, obteniendo a su vez, un objeto tabla sólo con las filas borradas; información esta, que
pasaremos al DataAdapter, para que actualice la información en el origen de datos.
Private Sub btnEliminar_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btnEliminar.Click
Dim oDataRow As DataRow
' obtener el objeto fila, de la tabla del dataset
' en el que estamos posicionados
oDataRow = Me.oDataSet.Tables("Clientes").Rows _
(Me.BindingContext(Ds_Instructores, "Instructores").Position)
oDataRow.Delete()
' borrar la fila
' mediante el método GetChanges(), obtenemos una tabla
' sin las filas borradas
Dim oTablaBorrados As DataTable
oTablaBorrados =_
Me.oDataSet.Tables("Clientes").GetChanges(DataRowState.Deleted)
'Aquí podriamos preguntar al usuario si de verdad quiere eliminar el
' registro. En cuyo caso pasariamos ala siguiente instrucción de
' actualización de la base de datos.
' actualizar en el almacén de datos las filas borradas
Me.oDataAdapter.Update(oTablaBorrados)
' confirmar los cambios realizados
Me.oDataSet.Tables("Clientes").AcceptChanges()
' Habrá que reposicionar a un registro concreto, por ejemplo el primero
Me.BindingContext(oDataset, "Instructores").Position = 1
End Sub
Visual Basic .Net _ Bases de Datos en VB.Net -
8
IES Fco. De Quevedo Desarrollo de Aplicaciones Informáticas
Visual Basic Net – Bases de Datos en VB.Net
Actualizar los datos origen.
Para que se haga un volcado del DataSet a la base de datos original, debemos indicarlo
explícitamente mediante el método .update del adaptador. Cuando damos esta orden el adaptador
de datos se encargará de revisar los cambios habidos y reflejarlos en los datos origen.
Formato:
Nombre_Adaptador.Update(Nombre_Dataset, “Elemento del dataset”)
Ejemplo:
Private Sub btnActualizar_Click(ByVal sender As System.Object,
System.EventArgs) Handles btnActualizar.Click
' actualizar los cambios realizados en el dataset
' contra la base de datos real
Me.oDataAdapter.Update(Me.oDataSet, "Clientes")
End Sub
ByVal
e
As
Buscar datos.
Tenemos dos métodos para realizar la búsqueda de registros, uno utiliza un método y solo busca
en el campo clave, el otro utiliza una sentencia sql.
•
Utilizando el método Find del objeto DataRowCollection, el cual nos permite hacer una
búsqueda por un campo clave.
Formato:
Nombre_DataRowCollection.Find(valor de campo clave)
Si hemos generado el Dataset mediante código y nos da problemas al utilizarlo en la
búsqueda, podemos generar un nuevo dataset mediante el asistente para utilizarlo en la
busqueda con el .Find.
Previamente se deberá haber cargado el dataset generado con la tabla correspondiente.
Ejemplo:
El siguiente ejemplo busca el registro cuyo campo clave sea igual al valor introducido en
el TextBox3. Tenemos un Dataset (DS_Instructores) y una tabla (Instructors) con un
campo clave (InstructorID).
Private Sub btn_Busca_Click(ByVal sender As System.Object, ByVal e
As System.EventArgs) Handles btn_Busca.Click
Dim miTabla As DataTable = DS_Instructores.Instructors
Dim FilaEncontrada As DataRow
FilaEncontrada = miTabla.Rows.Find(TextBox3.Text)
‘Realiza la busqueda
If FilaEncontrada Is Nothing Then
MsgBox("No se encontró nada")
Else
MsgBox(FilaEncontrada("Instructor"))
‘Muestra el campo Instructor
Me.BindingContext(DS_Instructores,
"Instructors").Position = FilaEncontrada("InstructorID") – 1
Visual Basic .Net _ Bases de Datos en VB.Net -
9
IES Fco. De Quevedo Desarrollo de Aplicaciones Informáticas
Visual Basic Net – Bases de Datos en VB.Net
End Sub
‘Se posiciona en el registro encontrado.
End If
Cuando la tabla sobre la que queremos buscar tiene más de un campo clave, se puede
dimensionar un array con tantos elementos como campos claves y asignar a cada uno el
valor del campo que buscamos y poner como objeto de la búsqueda dicho array, por
ejemplo:
Private Sub FindInMultiPKey(ByVal myTable As DataTable)
Dim FilaEncontrada As DataRow
' Create an array for the key values to find.
Dim findTheseVals(2) As Object
' Set the values of the keys to find.
findTheseVals(0) = "John"
findTheseVals(1) = "Smith"
findTheseVals(2) = "5 Main St."
FilaEncontrada = myTable.Rows.Find(findTheseVals)
' Display column 1 of the found row.
If Not (FilaEncontrada Is Nothing) Then
msgbox(FilaEncontrada(1).ToString())
End If
End Sub
•
Utilizando el método Select de un objeto Tabla,
Formato:
Nombre_Objeto_Tabla.Select(criterio de clausula Where sql)
El criterio sql debe ser equivalente a las sentencias que pueden seguir a una cláusula
Where de sql.
La principal fuente de errores que nos puede dar, proviene de la generación de la cadena a
utilizar en el criterio de búsqueda. Cuando queremos utilizar variables o literales, deben ir
entre comillas simples.
Así mismo hay que tener en cuenta que la operación devuelve un array con las filas que
coinciden con el criterio sql especificado, por lo que nos debemos asegurar que hemops
declarado un objeto capaz de contener un array de registros, asi que será del tipo
DataRow().
Para ver si ha tenido éxito podemos consultar el valor máximo de dicho array
(GetUpperBound), si fuese –1 es que no se ha encontrado nada.
Visual Basic .Net _ Bases de Datos en VB.Net -
10
IES Fco. De Quevedo Desarrollo de Aplicaciones Informáticas
Visual Basic Net – Bases de Datos en VB.Net
Ejemplo:
If TextBox1.Text = Nothing Then
MsgBox("Necesitas introducir un texto de búsqueda")
Else
Dim tabla as DataTable = DataSet2.Datos
Dim nuevafila As DataRow()
Dim sentencia As String
Dim foundRows As DataRow()
Dim campo as string = “Cod”
sentencia = campo & " = '" & TextBox1.Text & "'"
nuevafila = tabla.Select(sentencia)
If nuevafila.GetUpperBound(0) Is -1 Then
MsgBox("No se encontró ninguna coincidencia")
Else
MsgBox(nuevafila(0).Item("Cod") & " " & _
nuevafila(0).Item("Nombre") & " " & nuevafila(0).Item("Telefo"))
End If
End If
4. Conexión a Oracle.
Para conectar con bases de datos Oracle se procede
de forma similar a lo explicado en anteriores
apartados.
1. Elegimos el proveedor adecuado. Por defecto
Visual Studio trae un controlador para Oracle
(Microsoft OLE DB Provider for Oracle
Visual Basic .Net _ Bases de Datos en VB.Net -
11
IES Fco. De Quevedo Desarrollo de Aplicaciones Informáticas
Visual Basic Net – Bases de Datos en VB.Net
Especificaremos:
• Nombre del servidor de la base de datos
Oracle.
• Nombre de usuario y contraseña con el que
solicitaremos la conexión.
Probamos la conexión con el fin de asegurarnos que
están bien detallados los datos para la misma.
Aceptamos y quizás nos pida de nuevo la contraseña.
Una vez realizada la conexión, Crearemos el
Adaptador de datos. (En Cuadro de HerramientasDatos).
Seguiremos los pasos del Asistente
• Eligiendo la conexión antes creada.
• Especificando la sentencia Sql, o generándola.
Nos aparecerán todas las tablas del Servidor de Oracle, especificando entre paréntesis el nombre
del usuario al que pertenecen. Las que no se especifica ese datos son las propias del usuario
especificado en la conexión
A continuación generaremos el conjunto de datos, como de costumbre.
a. Bibliografía.
•
“VB.Net. Aprenda Ya”, Michael Halvorson, de. McGraw-Hill
Cap 19 pág, 517
Comenzar a utilizar ADO.NET.
•
”La Biblia de VBNet”, E. Petroutsos. Ed.Anaya Multimedia.
Pág. 1252 y siguientes
Trae un ejemplo de cómo hacer un Datagrid con dos tablas relacionadas.
•
“Programación en Visual Basic.net”, L.M. Blanco, Ed. Eidos.
•
”El lenguaje de programación Visual Basic.Net”, F.J. Ceballos. Ed. Ra-Ma.
Pág.347 y siguientes.
Visual Basic .Net _ Bases de Datos en VB.Net -
12
Descargar