Интерфейс - верное направление, но, как вы указали, статический класс не может реализовать интерфейс. Я понимаю, что хочу минимизировать суету создания объектов, но это, вероятно, будет необходимо для того, чтобы иметь два разных класса базы данных.
Решение, которое я предлагаю, является многогранным. Сначала интерфейс с подписью, похожей на ту, что вы перечислили выше:
public Interface IDbManager {
void RunSql(String pSql, DBParamsHelper pDBParams, String pConnStringConfigName)
}
Это может быть реализовано в версиях для SQL и Oracle, у вас уже есть версия SQL, просто сделайте ее нестатичной и реализуйте интерфейс.
Теперь попробуйте фабрику базы данных, например, как показано ниже:
public static class DbFactory {
public static IDbManager CreateDb(DbType type) {
select (type) {
case DbType.Sql:
return new SqlDbManager();
break;
case DbType.Sql:
return new OracleDbManager();
break;
}
}
}
Тогда вы сможете сделать что-то вроде:
var db = DbFactory.CreateDb(DbType.Sql);
db.RunQuery(...);
Этот код не проверен, но, надеюсь, вы поняли идею. Я использую подобное решение для одного из моих проектов, где мне нужно получать данные из разных хранилищ данных. Стратегия и фабричные модели облегчают этот процесс.
Надеюсь, это поможет!