Crear una conexión con independencia del tipo de base de datos que se utilice
Por Enrique Martínez Montejo
Última revisión: 26/05/2006
 

Debido a que los objetos de un proveedor específico de datos .NET deben implementar la interfaz IDbConnection, se puede diseñar una función que sea capaz de abrir una conexión con cualquier origen de datos, y devuelva la correspondiente clase Connection. Esto es lo que enseña el ejemplo que muestro a continuación, donde la función devolverá un objeto Connection específico.

Friend Function OpenConnection(ByVal connString As String, _
                               ByVal connType As Short) As System.Data.IDbConnection

    '*******************************************************************
    ' Nombre: OpenConnection
    ' por Enrique Martínez Montejo - 26/05/2006
    '
    ' Finalidad: La función devolverá un objeto Connection abierto
    ' dependiendo de la cadena de conexión especificada.
    ' Por defecto, la conexión se realizará a una base
    ' de datos SQL Server.
    '
    ' Entradas:
    ' connString:  String. Cadena de conexión.
    '
    ' connType: Tipo de conexión a la que pertenece el objeto
    ' Connection que se devolverá.
    '
    ' Resultado: Un objeto IDbConnection
    '
    '*******************************************************************


    Dim cnn As System.Data.IDbConnection
    Dim msg As String = ""

    Try
        Select Case connType
            Case 1 ' Conexión ODBC
                cnn = New System.Data.Odbc.OdbcConnection()

            Case 2 ' Conexión OleDb
                cnn = New System.Data.OleDb.OleDbConnection()

            Case 3 ' Conexión a Oracle
                cnn = New System.Data.OracleClient.OracleConnection()

            Case Else ' Conexión SQL Server
                cnn = New System.Data.SqlClient.SqlConnection()
        End Select

        ' Abrimos la conexión
        cnn.ConnectionString = connString
        cnn.Open()

        ' Devolvemos el objeto Connection
        Return cnn

    Catch ex As System.Data.Odbc.OdbcException
        msg = ex.Errors(0).Message

    Catch ex As System.Data.OleDb.OleDbException
        msg = ex.Errors(0).Message

    Catch ex As System.Data.OracleClient.OracleException
        msg = ex.Message

    Catch ex As System.Data.SqlClient.SqlException
        msg = ex.Errors(0).Message

    Catch ex As Exception
        msg = ex.Message

    Finally
        ' Advertimos de la excepción producida
        '

        If (msg.Length > 0) Then
            MessageBox.Show(msg, "Error de Conexión", _
                    MessageBoxButtons.OK, MessageBoxIcon.Information)
        End If

    End Try

End Function

Por defecto, la función intentará abrir una conexión con una base de datos de SQL Server, por lo que si su deseo es abrir un origen OleDb, como por ejemplo un libro de trabajo de Microsoft Excel, para ver en un control DataGrid los datos contenidos en un rango de celdas con nombre, utilizaría el siguiente código:

Private Sub Button1_Click(ByVal sender As System.Object, _
                          ByVal e As System.EventArgs) Handles Button1.Click

    ' Declaro los distintos objetos de ADO.NET que se utilizarán
    '

    Dim conexion As OleDbConnection
    Dim adaptador As OleDbDataAdapter
    Dim dataset1 As DataSet
    Dim comando As OleDbCommand

    Dim connString As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                               "Data Source=C:\Mis documentos\Libro1.xls;" & _
                               "Extended Properties='Excel 8.0;HDR=Yes'"

    ' Abrimos la conexión con el libro de trabajo. Para ello,
    ' efectuamos una llamada a la función OpennConnection
    '

    conexion = OpenConnection(connString, 2)

    ' Si la conexión no se ha podido establecer,
    ' abandonamos el procedimiento
    '

    If (conexion Is Nothing) Then Exit Sub

    ' Creamos y configuramos un objeto OleDbCommand
    '

    comando = New OleDbCommand()
    With comando
        .Connection = conexion
        .CommandText = "SELECT * FROM Clientes"
        .CommandType = CommandType.Text
    End With

    ' Creamos un adaptador de datos
    '

    adaptador = New OleDbDataAdapter(comando)

    ' Creamos un nuevo DataSet y lo rellenamos
    '

    dataset1 = New DataSet()
    adaptador.Fill(dataset1, "Clientes")

    ' Mostramos los datos en el DataGrid
    '

    DataGrid1.SetDataBinding(dataset1, "Clientes")

    ' Cerramos la conexión
    '

    conexion.Close()
    conexion.Dispose()

End Sub

Si en su proyecto tiene activada la instrucción Option Strict, el código fuente anterior no se ejecutará debido a que no se permite la conversión implícita de un objeto IDbConnection en un objeto SqlConnection. Si este es su caso, deberá de realizar una conversión explícita mediante las función CType o el operador DirectCast, que es el que vamos a utilizar en el ejemplo:

' Abrimos la conexión
'

conexion = DirectCast(OpenConnection(connString, 2), OleDbConnection)

 

Otros enlaces de interés:

Indice de Ejemplos de ADO .NET


Enrique Martínez Montejo - 2006

NOTA: La información contenida en este artículo, así como el código fuente incluido en el mismo, se proporciona COMO ESTÁ, sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo explicado, recomendado o sugerido en el presente artículo.

NOTE: The information contained in this article and source code included therein, is provided AS IS without warranty of any kind, and confers no rights. You assume any risk to implement, use or run it explained, recommended or suggested in this article.