Consultas a una base de datos (Devuelve múltiples registros)
Para realizar consultas que nos van a devolver múltiples líneas de resultados utilizaremos el objeto DataReader.
El DataReader proporciona un modo sencillo y ligero en términos de uso de memoria para leer consultas devueltas de una base de datos. Es de solo lectura y con desplazamiento solo hacia delante, podríamos compararlo con un RecordSet de ADO.
En este ejemplo utilizaremos un OleDbDataReader ya que nuestra base de datos esta creada con Access. OleDbDataReader es miembro del espacio con nombre System.Data.OleDb.
El proceso siempre es el mismo y lo único que cambiara es en que tipo de control volcamos los resultados. En este ejemplo vamos a realizar una consulta a una base de datos y vamos a recoger los datos devueltos en un control ListView. Este control tiene diferentes vistas y nosotros vamos a utilizar la de tipo detalle. Es un control muy útil y que da un aspecto profesional a las aplicaciones que desarrollamos.
Nuestro formulario será el siguiente:

Modificaremos las siguientes propiedades del ListView:
Name: Rejilla
GridLines: True
View: Detail (Como habéis observado las vistas son muy interesantes)
Columns: Se abre un cuadro de dialogo y pulsaremos el botón Agregar. A continuación modificaremos la propiedad Text y pondremos Cliente y la propiedad width pondremos 200 y pulsaremos Agregar y añadiremos otra columna según se muestra en el ejemplo y con la anchura que mejor se os adapte a vosotros y pulsaremos Aceptar.
Haremos doble clic en el botón del formulario y escribiremos el siguiente código:
- Imports System.Data.OleDb 'importamos el espacio con nombres en la parte superior del formulario por encima de todo
- Private Sub cmdAceptar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdAceptar.Click
- Try 'gestor de errores
- 'variable de conexión
- Dim Conexion As New System.Data.OleDb.OleDbConnection
- 'creamos una cadena de conexión
- Conexion.ConnectionString "Provider=Microsoft.Jet.OLEDB.4.0;Data
- Source=C:\Pruebas.mdb"
'creo la sentencia SQL del valor que quiere recuperar:
'el nombre y dirección de todos los clientes cuya población sea Barcelona
'y que me los devuelva ordenador alfabéticamente por el nombre del cliente.
- Dim Sql As String, Ciudad As String = "Barcelona"
- Sql = "SELECT Cliente, Direccion FROM Clientes Where Poblacion='" & Ciudad & "'" &
- " Order by Cliente"
- 'Abrimos la conexión
- Conexion.Open()
'creamos el comando al que pasamos la sentencia sql y le indicamos que conexión debe utilizar
'tal como vimos en blogs anteriores.
- Dim Olecmd As OleDbCommand = New OleDbCommand(Sql, Conexion)
'creamos un objeto OleDbDataReader
- Dim Oledr As OleDbDataReader
'Para ejecutar el comando con el OleDbDataReader utilizaremos el método ExecuteReader del comando.
- Oledr = Olecmd.ExecuteReader
'Y para leer los resultados devueltos utilizaremos el método Read sobre el OleDbDataReader 'Al llamar al método Read pasamos directamente al primer registro devuelto. 'El método Read devuelve un valor booleano. Si devuelve True quiere decir que hay más registros ' y por tanto el bucle While continuara. Cuando devuelva False se saldrá del bucle While
- While Oledr.Read()
- 'Creamos un objeto ListViewItem que representa un elemento del control ListView
- Dim LItem As New ListViewItem
- 'Guardamos en la primera columna el valor del primer campo que nos devuelve
- 'la consulta a la base de datos: Cliente
- LItem.Text = Oledr(0)
- 'Guardamos en la columna siguiente el siguiente valor que nos devuelve
- 'la consulta de la base de datos: Direccion y hacemos un casting sobre
- 'el resultado para convertirlo en un string.
- LItem.SubItems.Add(CType(Oledr(1), String))
- 'Insertamos los valores en el control ListView
- Rejilla.Items.Add(LItem)
- End While
- 'Una vez finalizado el bucle cerramos el objeto OleDbDataReader
- Oledr.Close()
- Catch ex As Exception
- MsgBox(ex.Message) 'mostramos el error
- Finally
- 'siempre cerramos la conexión
- Conexion.Close()
- End Try
- End Sub
Como resultado hemos llenado nuestra rejilla con los resultados de la base de datos. Sencillo y eficiente, poco más podemos pedir.
