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