using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data.Common; using System.Data.SqlClient; using System.Collections; using System.Data.SqlServerCe; using Sdaleo.Systems; using Devart.Data.PostgreSql; namespace Sdaleo { /// /// This class is a Object factory wrapper class around our DBMS /// internal static class DBMS { /// /// Creates a Connection Object depending on the type of DBMS we are using /// /// the DBSystem you want parameters for /// Must pass in a valid Connection String /// a valid connection * Caller Must Dispose of the Object *, or null if system is not available internal static DbConnection CreateDbConnection(DBSystem dbsystem, string ConnectionStr) { DbConnection connection = null; if (!String.IsNullOrEmpty(ConnectionStr)) { switch (dbsystem) { case DBSystem.SQL_SERVER: if(SystemAvailable.Check(dbsystem)) connection = (DbConnection)new SqlConnection(ConnectionStr); break; case DBSystem.SQL_CE: if (SystemAvailable.Check(dbsystem)) connection = (DbConnection)new SqlCeConnection(ConnectionStr); break; case DBSystem.ADVANTAGE: if (SystemAvailable.Check(dbsystem)) connection = (DbConnection)new SqlCeConnection(ConnectionStr); break; case DBSystem.CTREE: if (SystemAvailable.Check(dbsystem)) connection = (DbConnection)new SqlCeConnection(ConnectionStr); break; case DBSystem.MYSQL: if (SystemAvailable.Check(dbsystem)) connection = (DbConnection)new SqlCeConnection(ConnectionStr); break; case DBSystem.POSTGRES: if (SystemAvailable.Check(dbsystem)) connection = (DbConnection)new PgSqlConnection(ConnectionStr); break; } } return connection; } /// /// Creates a DataAdapter depending on the type of DBMS we are using /// /// the DBSystem you want a DataAdapter for /// pass in a valid Command Object for the DBMS /// a valid DataAdapter * Caller Must Dispose of the Object *, or null if system is not available internal static DbDataAdapter CreateDbDataAdapter(DBSystem dbsystem, DbCommand dbcommand) { DbDataAdapter dbDataAdapter = null; switch (dbsystem) { case DBSystem.SQL_SERVER: if (SystemAvailable.Check(dbsystem)) dbDataAdapter = new SqlDataAdapter((SqlCommand) dbcommand); break; case DBSystem.SQL_CE: if (SystemAvailable.Check(dbsystem)) dbDataAdapter = new SqlCeDataAdapter((SqlCeCommand) dbcommand); break; case DBSystem.ADVANTAGE: if (SystemAvailable.Check(dbsystem)) dbDataAdapter = new SqlCeDataAdapter((SqlCeCommand)dbcommand); break; case DBSystem.CTREE: if (SystemAvailable.Check(dbsystem)) dbDataAdapter = new SqlCeDataAdapter((SqlCeCommand)dbcommand); break; case DBSystem.MYSQL: if (SystemAvailable.Check(dbsystem)) dbDataAdapter = new SqlCeDataAdapter((SqlCeCommand)dbcommand); break; case DBSystem.POSTGRES: if (SystemAvailable.Check(dbsystem)) dbDataAdapter = new PgSqlDataAdapter((PgSqlCommand)dbcommand); break; } return dbDataAdapter; } /// /// Creates an Error Object to be returned to the Caller, fills values depending on DBMS /// /// the DBSystem you want an Error for /// the exception being thrown by the DBMS /// a DBRetVal Object filled with the Error Data, or null if system is not available internal static DBRetVal CreateErrorDBRetVal(DBSystem dbsystem, Exception e) { DBRetVal retVal = null; switch (dbsystem) { case DBSystem.SQL_SERVER: { if (SystemAvailable.Check(dbsystem)) { SqlException ex = e as SqlException; if (ex != null) retVal = new DBRetVal(ex.Number, ex.Message, ex.Errors); } } break; case DBSystem.SQL_CE: { if (SystemAvailable.Check(dbsystem)) { SqlCeException ex = e as SqlCeException; if (ex != null) retVal = new DBRetVal(ex.NativeError, ex.Message, ex.Errors); } } break; case DBSystem.ADVANTAGE: { if (SystemAvailable.Check(dbsystem)) { SqlCeException ex = e as SqlCeException; if (ex != null) retVal = new DBRetVal(ex.NativeError, ex.Message, ex.Errors); } } break; case DBSystem.CTREE: { if (SystemAvailable.Check(dbsystem)) { SqlCeException ex = e as SqlCeException; if (ex != null) retVal = new DBRetVal(ex.NativeError, ex.Message, ex.Errors); } } break; case DBSystem.MYSQL: { if (SystemAvailable.Check(dbsystem)) { SqlCeException ex = e as SqlCeException; if (ex != null) retVal = new DBRetVal(ex.NativeError, ex.Message, ex.Errors); } } break; case DBSystem.POSTGRES: { if (SystemAvailable.Check(dbsystem)) { PgSqlException ex = e as PgSqlException; if (ex != null) retVal = new DBRetVal(0, ex.Message, null); } } break; } return retVal; } /// /// Creates a DBMS Specific Parameter Array from a DMBS Independent Parameter Array /// /// the DBSystem you want parameters for /// a valid DBMSIndependent Param array /// a DBMS Specific Parameter Array internal static DbParameter[] CreateDbParameter(DBSystem dbsystem, DBMSIndParameter[] parameters) { List param_s = new List(); // Convert the Parameters foreach (DBMSIndParameter parameter in parameters) { switch (dbsystem) { case DBSystem.SQL_SERVER: { if (SystemAvailable.Check(dbsystem)) { param_s.Add(new SqlParameter(parameter.parameterName, parameter.Value)); } } break; case DBSystem.SQL_CE: { if (SystemAvailable.Check(dbsystem)) { param_s.Add(new SqlCeParameter(parameter.parameterName, parameter.Value)); } } break; case DBSystem.ADVANTAGE: { if (SystemAvailable.Check(dbsystem)) { param_s.Add(new SqlCeParameter(parameter.parameterName, parameter.Value)); } } break; case DBSystem.CTREE: { if (SystemAvailable.Check(dbsystem)) { param_s.Add(new SqlCeParameter(parameter.parameterName, parameter.Value)); } } break; case DBSystem.MYSQL: { if (SystemAvailable.Check(dbsystem)) { param_s.Add(new SqlCeParameter(parameter.parameterName, parameter.Value)); } } break; case DBSystem.POSTGRES: { if (SystemAvailable.Check(dbsystem)) { param_s.Add(new PgSqlParameter(parameter.parameterName, parameter.Value)); } } break; } } // Return the Parameter return param_s.ToArray(); } } }