Llenar un ComboBox III

Seguimos, que es viernes y no tengo ganas de hacer mucho en el curro.

Continuando con el aprendizaje, esta clase no sólo fue mi primera clase y supuso mi primer constructor, sino que también fue la primera vez que me pegué con las propiedades. Prácticamente se puede decir que LlenarComboBox me desvirgó en VB2005. La clase terminó con tres propiedades públicas: la cadena de conexión, el objeto conexión OleDB y el objeto conexión SQL. Inicialemente estos dos últimos eran uno solo (sólo OleDB) y de sólo lectura, pero luego empecé a cogerle cariño a los bloque Using y modifiqué el código. Y no hay mucho más que decir, las propiedades son éstas:

''' <summary>
''' Cadena de conexión que va a usarse luego para conectarse
''' a la base de datos
''' </summary>
Public WriteOnly Property CadConexion() As String
    Set(ByVal value As String)
        Me._Conexion = value
        'Identificamos el tipo de conexión.
        Me._BDD = QueBase.NoSel
        For i As Integer = 0 To Me._TipoConexion.Length - 1
            If Me._Conexion.IndexOf(Me._TipoConexion(i).Presenta) _
                                     <> -1 Then
                Me._BDD = Me._TipoConexion(i).Tipo
                Exit For
            End If
        Next
    End Set
End Property

''' <summary>
''' Establece o devuelve el objeto OLEDBConnection
'''  que usa LlenarCombobox
''' </summary>
Public Property ConexionOLEDB() As OleDb.OleDbConnection
    Get
        Return Me._cnOleDb
    End Get
    Set(ByVal value As OleDb.OleDbConnection)
        If value IsNot Nothing Then
            Me._cnOleDb = value
            Me.CadConexion = value.ConnectionString
        End If
    End Set
End Property

''' <summary>
''' Establece o devuelve el objeto SQLConnection
''' que usa LlenarCombobox
''' </summary>
Public Property ConexionSQL() As SqlClient.SqlConnection
    Get
        Return Me._cnSQL
    End Get
    Set(ByVal value As SqlClient.SqlConnection)
        If value IsNot Nothing Then
            Me._cnSQL = value
            Me.CadConexion = value.ConnectionString
        End If
    End Set
End Property

Sigo con la duda de si añadir en el Set una comprobación del tipo

If Me._cnOleDb Is Nothing Then
    Me._cnOleDb = New OleDb.OleDbConnection
End If

que es lo que me pide el cuerpo, pero sin esas tres líneas también funciona, aunque no sé el porqué. En fin, todavía no soy más que un aficionadillo.

Los métodos de conexión están divididos en dos grupos: los métodos públicos y los métodos privados. El método público Conectar identifica el tipo de conexión que estamos manejando y llama al método privado correspondiente. Vale, para las pocas líneas de código que son podría haber usado un único método, pero así me resulta más cómodo. Todos los métodos son funciones y devuelven un valor booleano con el resultado de la operación. Esto también es una manía personal, y bastante estúpida porque luego rara vez uso el valor de vuelta. De todas formas, ha habido veces (dos) que me ha venido bien. Por otra parte, en caso de error el método devuelve una excepción al método de llamada. En esta clase todos los errores se mandan de vuelta, para que se gestione desde el programa principal. No me complico mucho la vida, no.

''' <summary>
''' Conecta a la base de datos indicada
''' por la cadena de conexión pasada previamente
''' </summary>
''' <returns>True si la conexión se realiza,
''' false si se produce un error</returns>
''' <remarks>Hay que haber pasado la cadena de conexión previamente
''' a la propiedad CadConexion, de lo contrario devuelve false.
''' Si se produce una excepción, la devuelve para su gestión</remarks>
Public Function Conectar() As Boolean
    Dim Result As Boolean
    Try
        Select Case _BDD
            Case QueBase.NoSel
                'Mensaje de error
            Case QueBase.Access
                Result = Me.ConectarOleDB
            Case QueBase.SQL
                Result = Me.ConectarSQL
            Case Else
                Result = False
        End Select
    Catch NoConexion As Exception
        Throw NoConexion
    End Try
    Return Result
End Function

Private Function ConectarOleDB() As Boolean
    Dim Result As Boolean
    If Me._cnOleDb Is Nothing Then
        Me._cnOleDb = New OleDb.OleDbConnection
    End If
    With Me
        Try
            ._cnOleDb.ConnectionString = ._Conexion
            ._cnOleDb.Open()
            Result = True
        Catch ex As OleDb.OleDbException
            ._cnOleDb.Close()
            Result = False
            Throw ex
        End Try
    End With
    Return Result
End Function

Private Function ConectarSQL() As Boolean
    Dim Result As Boolean
    If Me._cnSQL Is Nothing Then
        Me._cnSQL = New SqlClient.SqlConnection
    End If
    With Me
        Try
            ._cnSQL.ConnectionString = ._Conexion
            ._cnSQL.Open()
            Result = True
        Catch ex As SqlClient.SqlException
            ._cnSQL.Close()
            Result = False
            Throw ex
        End Try
    End With
    Return Result
End Function

Public Sub Desconectar()
    Select Case _BDD
        Case QueBase.Access
            Me._cnOleDb.Close()
            Me._cnOleDb = Nothing
        Case QueBase.SQL
            Me._cnSQL.Close()
            Me._cnSQL = Nothing
    End Select
End Sub

Como se puede ver, en el método público Conectar falta gestionar el caso de que se intente conectar sin haber definido primeramente el tipo de base de datos, o sea, cuando falta la cadena de conexión. Olvidadizo que es uno. Pero, vamos, que ahí se generará una nueva excepción (tipo aún por decidir) con un mensaje que informe de lo inútil que es el progrador que se olvidó de poner los pilares antes de levantar los tabiques y a otra cosa.

Y eso es todo por hoy. Como se puede ver, un poquito de código sencillito y es que mis neuronas no dan para mucho más. La próxima entrega, los métodos privados y públicos para llenar un ListControl (o sea, tanto un ListBox como un ComboBox). He de reconocer que con ellos puse en práctica por primera vez lo de la «sobrecarga de operadores» y, confieso, me emocioné un poco. Hasta entonces, nos vemos en el Gentleman Loser

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.