Не используйте ODBC.Используйте классы в System.Data.SqlClient
для SQL Server и ODP.NET для Oracle.Классы в обоих пространствах имен реализуют соответствующие интерфейсы в пространстве имен System.Data
- так что вы можете работать с ними одинаково - все, что вам нужно, - это одна простая фабрика, которая будет возвращать либо реализацию SQLClient, либо реализацию ODP.NET любого интерфейса, который вам нуженработать с чем-то вроде этого:
public enum rdbmsTypes
{
SQLServer,
Oracle
}
public class ADONetFactory
{
private rdbmsTypes _dbType;
private string _connectionString;
public ADONetFactory (rdbmsTypes dbType, string connectionString)
{
_dbType = dbType;
_connectionString = connectionString;
}
public System.Data.IDbConnection GetConnecion()
{
switch(_dbType)
{
case rdbmsTypes.SQLServer:
return new System.Data.SqlClient.SqlConnection(_connectionString);
case rdbmsTypes.Oracle:
return new Oracle.DataAccess.Client.OracleConnection(_connectionString);
}
ThrowNotSupportedException();
}
public System.Data.IDbCommand GetCommand()
{
switch (_dbType)
{
case rdbmsTypes.SQLServer:
return new System.Data.SqlClient.SqlCommand();
case rdbmsTypes.Oracle:
return new Oracle.DataAccess.Client.OracleCommand();
}
ThrowNotSupportedException();
}
private void ThrowNotSupportedException()
{
throw new NotSupportedException("The RDBMS type " + Enum.GetName(typeof(rdbmsTypes), _dbType) + " is not supported");
}
}
Тогда вы должны иметь встроенную поддержку для всех типов данных в обеих базах данных.