46 - SqlCommand (select): Listar registros


Vimos el concepto anterior como enviar datos al servidor para que se efectúe un insert en una tabla.

Veremos ahora como recuperar los datos almacenados en una tabla para mostrarlos en pantalla.

Problema

Imprimir por pantalla todos los registros contenidos en la tabla articulos.

Para recuperar datos de una tabla tenemos que utilizar el comando SQL select indicando el nombre de la tabla de donde se recuperan los datos y los campos propiamente dichos.

Crear un proyecto llamado: BaseDeDatos3 y definir la siguiente interfaz visual:

Un objeto de la clase Button.
Un objeto de la clase TextBox (propiedad Multiline: true y ScrollBar: Vertical
comando select SqlCommand SQL Server

En el evento Click del botón procedemos a recuperar los datos de la tabla articulos y los mostramos dentro del TextBox.

Imports System.Data.SqlClient

Public Class Form1
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim conexion As SqlConnection
        conexion = New SqlConnection("server=DIEGO-PC ; database=base1 ; integrated security = true")
        conexion.Open()
        Dim cadena As String = "select codigo, descripcion, precio from articulos"
        Dim comando As SqlCommand
        comando = New SqlCommand(cadena, conexion)
        Dim registros As SqlDataReader
        registros = comando.ExecuteReader()
        Do While registros.Read() = True
            TextBox1.AppendText(registros("codigo"))
            TextBox1.AppendText(" - ")
            TextBox1.AppendText(registros("descripcion"))
            TextBox1.AppendText(" - ")
            TextBox1.AppendText(registros("precio"))
            TextBox1.AppendText(vbCrLf)
        Loop
        conexion.Close()
    End Sub
End Class

Recordar que siempre debemos importar es espacio de nombres:

Imports System.Data.SqlClient

Donde se declaran las clases SqlConnection, SqlCommand etc.

Lo primero que hacemos es configurar la cadena de conexión y abrirla:

        Dim conexion As SqlConnection
        conexion = New SqlConnection("server=DIEGO-PC ; database=base1 ; integrated security = true")
        conexion.Open()

El comando SQL para recuperar todas la filas de la tabla articulos es:

        Dim cadena As String = "select codigo, descripcion, precio from articulos"

Seguidamente seguimos con la creación del objeto de la clase SqlCommand pasando el String con el comando SQL y la referencia a la conexión:

        Dim comando As SqlCommand
        comando = New SqlCommand(cadena, conexion)

Lo nuevo aparece cuando queremos recuperar los datos que genera el SQL Server. Para esto llamamos al método ExecuteReader del objeto SqlCommand:

        Dim registros As SqlDataReader
        registros = comando.ExecuteReader()

Este método retorna un objeto de la clase SqlDataReader que almacena el resultado del comando SQL select.

Para acceder a cada fila retornada por el comando SQL select debemos disponer una estructura repetitiva Do While y llamar en cada vuelta del ciclo al método Read:

        Do While registros.Read() = True
            TextBox1.AppendText(registros("codigo"))
            TextBox1.AppendText(" - ")
            TextBox1.AppendText(registros("descripcion"))
            TextBox1.AppendText(" - ")
            TextBox1.AppendText(registros("precio"))
            TextBox1.AppendText(vbCrLf)
        Loop

Imaginemos que el comando SQL select retorna 5 filas. Cada llamada a Read avanza un puntero al siguiente registro y dentro del Do While lo recuperamos mediante el objeto registros y mediante un subíndice indicamos el nombre de campo de la tabla a recuperar.

Por ejemplo si la tabla articulos estuviera vacía la primera vez que se ejecuta el Do While el método Read retorna false.

El resultado de ejecutar este programa con la tabla articulos conteniendo 5 filas:

comando select SqlCommand SQL Server

Para que se muestren un registro debajo del otro dentro del TextBox debemos insertar un salto de línea con la constante llamada vbCrLf:

            TextBox1.AppendText(vbCrLf)

Retornar