Imports System.Data.SqlClient
Imports System.Data

Class MainWindow
  Private ConexionConBD As SqlConnection = Nothing
  Private OrdenSql As SqlCommand
  Private Lector As SqlDataReader
  Private strConexion As String = Nothing

  Private Sub Window_Loaded(sender As System.Object, e As System.Windows.RoutedEventArgs)
    ' Crear la conexión
    strConexion = "Data Source=.\sqlexpress;" &
      "Initial Catalog=bd_telefonos; Integrated Security=True"
  End Sub

  Private Sub btMostrarDatos_Click(sender As System.Object, e As System.Windows.RoutedEventArgs)
    Using ConexionConBD = New SqlConnection(strConexion)
      ' Crear una consulta
      'Dim Consulta As String = "SELECT nombre, telefono FROM telefonos " &
      '  "WHERE telefono LIKE '" & ctSql.Text & "'"

      'Dim Consulta As String = "SELECT nombre, telefono FROM telefonos " &
      '  "WHERE telefono LIKE '" & ctSql.Text.Replace("'", "''") & "'"

      ' Órdenes parametrizadas
      'Dim Consulta As String = "SELECT nombre, telefono FROM telefonos " &
      '                         "WHERE telefono LIKE @prefijo"
      'OrdenSql = New SqlCommand(Consulta, ConexionConBD)
      ''OrdenSql.Parameters.AddWithValue("@prefijo", ctSql.Text)
      'OrdenSql.Parameters.Add("@prefijo", SqlDbType.VarChar)
      'OrdenSql.Parameters("@prefijo").Value = ctSql.Text

      ' Procedimiento almacenado
      OrdenSql = New SqlCommand("stproObtenerTfnos", ConexionConBD)
      OrdenSql.CommandType = CommandType.StoredProcedure
      OrdenSql.Parameters.AddWithValue("@prefijo", ctSql.Text)

      ' Abrir la conexión con la base de datos
      ConexionConBD.Open()
      ' ExecuteReader hace la consulta y devuelve un SqlDataReader
      Lector = OrdenSql.ExecuteReader()
      ' Limpiar la lista
      lsTfnos.Items.Clear()
      ' Llamar siempre a Read antes de acceder a los datos
      While Lector.Read() ' siguiente registro
        lsTfnos.Items.Add(Lector("nombre") + " " + Lector("telefono"))
      End While
      ' Llamar siempre a Close una vez finalizada la lectura
      Lector.Close()
    End Using
  End Sub
End Class
