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)
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.