Para empezar vamos a crear la capa de datos para poder conectarnos a 4 gestores de bases de datos, para lograr eso vamos a utilizar el controlador ODBC para cada gestor.
El controlador ODBC es una API estándar para el acceso a datos, se caracteriza por ser independiente del origen de datos, lenguaje o sistemas operativos.
No voy a seguir con mas conceptos para no aburrirlos ni aburrirme, así que pasemos a lo bueno
los gestores escogidos que vamos a usar para realizar las pruebas son los siguientes
-SqlServer
-Oracle
-MySql
-Postgress
pero si gustan añadir otro gestor creo q lo van a poder hacer sin ningún problema, por que por eso se caracteriza el ODBC
Empezamos creando un nuevo proyecto de biblioteca de clases en el Visual Studio.

Renombramos a la clase que viene por defecto a DataProvider, y su contenido es el siguiente.
using System;
using System.Collections.Generic;
using System.Text;
namespace DAL
{
public enum DataProvider
{
Oracle, SqlServer, MySql, PostgresSql
}
}
El objetivo de esa clase es solamente tener una lista de los gestores con los que vamos a trabajar, de esa forma no tenemos que escribirlos a cada momento.
Posteriormente nos creamos otra clase la cual nombraremos gDatos, o como uds gusten, yo por alguna razón me acostumbre a ese nombre.
añadimos las siguientes librerias q son nesesarias para conectarse al ODBC
using System.Data;
using System.Data.Odbc;
y empezamos creándonos las 3 primeras variables
private System.Data.Odbc.OdbcConnection OdbcCon;
private System.Data.Odbc.OdbcCommand OdbcCom;
private System.Data.Odbc.OdbcDataReader OdbcDR;
El primero es para realizar la conexión a ODBC Driver, el segundo es para mandar comando o consultas al gestor de base de datos, y la tercera es para leer datos devueltos en las consultas
luego nos creamos las propiedades de la clase.
public string ConexString
{ set; get; }
public string BaseDatos
{ set; get; }
public string Usuario
{ set; get; }
public string Password
{ set; get; }
public string Server
{ set; get; }
public string Puerto
{ set; get; }
public DataProvider TipoCon
{ set; get; }
No creo que haya problemas entendiendo las propiedades pero si alguien tiene duda es libre de preguntar.
continuamos creando el construnctor y el primer metodo
public gDatos(string _BaseDatos,
string _Usuario,
string _Password,
string _Server,
string _Puerto,
DataProvider _TipoCon)
{
BaseDatos = _BaseDatos;
Usuario = _Usuario;
Password = _Password;
Server = _Server;
Puerto = _Puerto;
TipoCon = _TipoCon;
GetConexionString();
}
public void GetConexionString()
{
switch (TipoCon)
{
case DataProvider.Oracle:
ConexString = "DRIVER={Microsoft ODBC for Oracle};SERVER="
+ Server + ";DATABASE=" + BaseDatos
+ ";UID=" + Usuario + ";PWD=" + Password;
break;
case DataProvider.SqlServer:
ConexString = "DRIVER={SQL Server};SERVER="
+ Server + ";DATABASE=" + BaseDatos
+ ";UID=" + Usuario + ";PWD=" + Password ;
break;
case DataProvider.MySql:
ConexString = "DRIVER={MySQL ODBC 5.1 Driver};SERVER="
+ Server + ";PORT=" + Puerto + ";DATABASE="
+ BaseDatos + ";UID=" + Usuario + ";PWD=" + Password + ";OPTION=3";
break;
case DataProvider.PostgresSql:
ConexString = "DRIVER={PostgreSQL ANSI(x64)};SERVER="
+ Server + ";PORT=" + Puerto + ";DATABASE="
+ BaseDatos + ";UID=" + Usuario + ";PWD=" + Password;
break;
}
}
el constructor lo que hace es inicializar las variables con los parámetros mandados, no es necesarios mandar todos los parámetros, por ejemplo en muchos casos el puerto no es necesario y podemos enviarle vació ("".
proseguimos creando una función que nos servirá para probar las conexiones
public bool TestConex()
{
bool exito = false;
OdbcCon = new System.Data.Odbc.OdbcConnection(ConexString);
try
{
if (OdbcCon.State == ConnectionState.Closed)
{
OdbcCon.Open();
exito = true;
}
}
catch (System.Data.Odbc.OdbcException Ex)
{
// aca poner alguna excepcion
throw new Exception("No se pudo conectar al servidor," +
"verifique que los parametros de conexion son correctos";
}
return exito;
}
y para probar nuestro avance creamos un formulario con los siguientes componentes.

En el evento load del formulario colocamos el siguiente código
CBBProvider.Items.Add(DataProvider.MySql);
CBBProvider.Items.Add(DataProvider.Oracle);
CBBProvider.Items.Add(DataProvider.PostgresSql);
CBBProvider.Items.Add(DataProvider.SqlServer);
y por ultimo en el boton colocamos lo siguiente
gDatos g = new gDatos(TxtBaseDatos.Text, TxtUsuario.Text, TxtPassword.Text, TxtServidor.Text, "", (DataProvider)CBBProvider.SelectedItem);
try
{
if (g.TestConex())
TxtLog.AppendText("Conexion establesida a " + g.Server + "rn";
else
TxtLog.AppendText("Error al conectar a " + g.Server + "rn";
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
y tendriamos lo siguiente
para terminar esta primera parte paso a los posibles errores.
Punto 1
Verificar que la aplicación este diseñada para cualquier CPU, esto me mantuvo pensando un buen rato
eso lo pueden ver en la siguiente ventana
Clic derecho en el proyecto -> Propiedades
en esa ventana tienen que asegurarse que el parámetro "Destino de plataforma este en Any CPU" de lo contrario algunas conexiones no podrán realizarse.
Punto 2 es posible que cuando uds lean esto las verciones de los drivers cambien, o quieran utilizar otro driver, ese parametro se cambia en función al siguiente valor

En caso de no funcionar pueden consultar al todopoderoso google por la cadena de conexión para el respectivo driver
También se puede crear la cadena de conexión a traves del parámetro DSN que hay que configurar previamente, eso no lo voy a hacer acá por motivos que voy a explicar mas adelante.
si gustan pueden pasarse por mi nuevo blog en el que voy a completar todo este proyecto
http://desarrollandomitesis.blogspot.com/
El controlador ODBC es una API estándar para el acceso a datos, se caracteriza por ser independiente del origen de datos, lenguaje o sistemas operativos.
No voy a seguir con mas conceptos para no aburrirlos ni aburrirme, así que pasemos a lo bueno
los gestores escogidos que vamos a usar para realizar las pruebas son los siguientes
-SqlServer
-Oracle
-MySql
-Postgress
pero si gustan añadir otro gestor creo q lo van a poder hacer sin ningún problema, por que por eso se caracteriza el ODBC
Empezamos creando un nuevo proyecto de biblioteca de clases en el Visual Studio.

Renombramos a la clase que viene por defecto a DataProvider, y su contenido es el siguiente.
using System;
using System.Collections.Generic;
using System.Text;
namespace DAL
{
public enum DataProvider
{
Oracle, SqlServer, MySql, PostgresSql
}
}
El objetivo de esa clase es solamente tener una lista de los gestores con los que vamos a trabajar, de esa forma no tenemos que escribirlos a cada momento.
Posteriormente nos creamos otra clase la cual nombraremos gDatos, o como uds gusten, yo por alguna razón me acostumbre a ese nombre.
añadimos las siguientes librerias q son nesesarias para conectarse al ODBC
using System.Data;
using System.Data.Odbc;
y empezamos creándonos las 3 primeras variables
private System.Data.Odbc.OdbcConnection OdbcCon;
private System.Data.Odbc.OdbcCommand OdbcCom;
private System.Data.Odbc.OdbcDataReader OdbcDR;
El primero es para realizar la conexión a ODBC Driver, el segundo es para mandar comando o consultas al gestor de base de datos, y la tercera es para leer datos devueltos en las consultas
luego nos creamos las propiedades de la clase.
public string ConexString
{ set; get; }
public string BaseDatos
{ set; get; }
public string Usuario
{ set; get; }
public string Password
{ set; get; }
public string Server
{ set; get; }
public string Puerto
{ set; get; }
public DataProvider TipoCon
{ set; get; }
No creo que haya problemas entendiendo las propiedades pero si alguien tiene duda es libre de preguntar.
continuamos creando el construnctor y el primer metodo
public gDatos(string _BaseDatos,
string _Usuario,
string _Password,
string _Server,
string _Puerto,
DataProvider _TipoCon)
{
BaseDatos = _BaseDatos;
Usuario = _Usuario;
Password = _Password;
Server = _Server;
Puerto = _Puerto;
TipoCon = _TipoCon;
GetConexionString();
}
public void GetConexionString()
{
switch (TipoCon)
{
case DataProvider.Oracle:
ConexString = "DRIVER={Microsoft ODBC for Oracle};SERVER="
+ Server + ";DATABASE=" + BaseDatos
+ ";UID=" + Usuario + ";PWD=" + Password;
break;
case DataProvider.SqlServer:
ConexString = "DRIVER={SQL Server};SERVER="
+ Server + ";DATABASE=" + BaseDatos
+ ";UID=" + Usuario + ";PWD=" + Password ;
break;
case DataProvider.MySql:
ConexString = "DRIVER={MySQL ODBC 5.1 Driver};SERVER="
+ Server + ";PORT=" + Puerto + ";DATABASE="
+ BaseDatos + ";UID=" + Usuario + ";PWD=" + Password + ";OPTION=3";
break;
case DataProvider.PostgresSql:
ConexString = "DRIVER={PostgreSQL ANSI(x64)};SERVER="
+ Server + ";PORT=" + Puerto + ";DATABASE="
+ BaseDatos + ";UID=" + Usuario + ";PWD=" + Password;
break;
}
}
el constructor lo que hace es inicializar las variables con los parámetros mandados, no es necesarios mandar todos los parámetros, por ejemplo en muchos casos el puerto no es necesario y podemos enviarle vació ("".
proseguimos creando una función que nos servirá para probar las conexiones
public bool TestConex()
{
bool exito = false;
OdbcCon = new System.Data.Odbc.OdbcConnection(ConexString);
try
{
if (OdbcCon.State == ConnectionState.Closed)
{
OdbcCon.Open();
exito = true;
}
}
catch (System.Data.Odbc.OdbcException Ex)
{
// aca poner alguna excepcion
throw new Exception("No se pudo conectar al servidor," +
"verifique que los parametros de conexion son correctos";
}
return exito;
}
y para probar nuestro avance creamos un formulario con los siguientes componentes.

En el evento load del formulario colocamos el siguiente código
CBBProvider.Items.Add(DataProvider.MySql);
CBBProvider.Items.Add(DataProvider.Oracle);
CBBProvider.Items.Add(DataProvider.PostgresSql);
CBBProvider.Items.Add(DataProvider.SqlServer);
y por ultimo en el boton colocamos lo siguiente
gDatos g = new gDatos(TxtBaseDatos.Text, TxtUsuario.Text, TxtPassword.Text, TxtServidor.Text, "", (DataProvider)CBBProvider.SelectedItem);
try
{
if (g.TestConex())
TxtLog.AppendText("Conexion establesida a " + g.Server + "rn";
else
TxtLog.AppendText("Error al conectar a " + g.Server + "rn";
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
y tendriamos lo siguiente
para terminar esta primera parte paso a los posibles errores.
Punto 1
Verificar que la aplicación este diseñada para cualquier CPU, esto me mantuvo pensando un buen rato
eso lo pueden ver en la siguiente ventana
Clic derecho en el proyecto -> Propiedades
en esa ventana tienen que asegurarse que el parámetro "Destino de plataforma este en Any CPU" de lo contrario algunas conexiones no podrán realizarse.
Punto 2 es posible que cuando uds lean esto las verciones de los drivers cambien, o quieran utilizar otro driver, ese parametro se cambia en función al siguiente valor

En caso de no funcionar pueden consultar al todopoderoso google por la cadena de conexión para el respectivo driver
También se puede crear la cadena de conexión a traves del parámetro DSN que hay que configurar previamente, eso no lo voy a hacer acá por motivos que voy a explicar mas adelante.
si gustan pueden pasarse por mi nuevo blog en el que voy a completar todo este proyecto
http://desarrollandomitesis.blogspot.com/

