Multi Base de datos.en VB.net

Estoy haciendo una aplicación en vb.net, no sé que base de datos tiene el cliente, y quiero hacerla para 3 bases de datos: MySQL, Oracle y SQL-Server. La he desarrollado en MySQL, y claro las clases son MySQLConnection, MySQLDataReader, en SQL-Server son SQLConnection, SQLReader ... (no se bien si es esa nomenclatura, pero bueno cada base de datos tiene la suya).
¿Cómo puedo hacerlo para no tener que reescribir todo el código al que hacen referencia dichas clases?
¿Hay alguna clase "Connection" superior a todas las de dichas bases de datos que pueda contener p.ej. Los datos de conexión y luego utilizarla o bien empleando un Ctype(...,...) convertirla a la deseada?
No se si me explico, si puedes ayudarme te lo agradeceré.
Respuesta
1
Existen las enterprice Library de Microsoft, eso te resuelve el problema, sin embargo si ya tienes una clase es copiar esa clase y cambiar el MySqlxxxx por SQL y por el otro proveedor de esa manera lo puedes hacer sencillo, el resto de código queda funcionando de manera igual.

1 respuesta más de otro experto

Respuesta
2
Entiendo por lo que comentas que trabajas con las clases de datos "directas" y sin usar ningún O/RM como Entity Framework o LINQTo Entities.
En el primer caso, que es el que planteas, tienes clases diferentes para cada motor y es imposible salir de ahí.
En ese caso, lo que yo haría, es tener una clase "madre" para todas las conexiones (un "GenericConnection", "GenericDataReader", etc..) que implemente la interfaz de las clases básicas y que, por debajo, instancie el SQLConnection para SQL SERVER o MySQLConnection para MySQL (por ejemplo) y llame a los métodos necesarios en función del motor seleccionado.
Si no, lo ideal a mi parecer, es usar Entity Framework y tener varias "ConnectionStrings" cada una hacia un motor de base de datos y cuando vayas a publicar comentar las que no se usen.
Como Entity Framework te crea una capa por encima con sus clases y métodos da igual que por debajo tengas un Access, MySql, SQL Server o Oracle.
Gracias por tu respuesta, investigaré lo que comentas.
El tema ya lo he solucionado utilizando idbconnection, dbdatareader, dbcommand, que son interfaces, lo que llamamos para entendermos "clases madre" y luego a dichas entidades le asigno la conexión (en el caso de idbconnection) que se pertoque, MsqlConnection, OracleConnection ... Claro antes de todo eso, se han de utilizan las factories, para a partir de ahí generar los demás elementos, que quien las puedes asignar como he dicho más arriba o bien mediante factoría.createConnection, y así con lo demás ...
Pero ya te digo investigaré también lo que me comentas de las "Entity Framework"
Saludos.
Exacto! Cuando te hablaba de clases "madre" me refería a Interfaces pero quería usar un lenguaje más coloquial para explicar la idea.
Si lo has solucionado así fantástico aunque para el futuro te recomiendo que uses O/RM's que son mucho más potentes para hacer una capa de datos más consistente e independiente del resto del código.
Por si te interesa el tema tengo un artículo en mi blog que explica qué es Entity Framework y como funciona :)
http://www.compilando.es/post/2011/05/12/Entity-Framework-vs-LINQ-to-SQL.aspx
Si ya no tienes más dudas al respecto y consideras que el tema está cerrado te agradecería que cerraras y puntuaras la respuesta.
Gracias por todo y perdona por no finalizar antes, miraré lo que me comentas, aunque la solución que he encontrado va bien ... pero nunca está de más perfeccionar.
Saludos.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas