Я бы настоятельно рекомендовал использовать ORM, например, NHibernate. Он поддерживает как SQL Server, так и Oracle и устраняет различия между ними.
Я имею в виду, что вам нужно написать запрос только один раз в формате, понятном NHibernate, и он переведет его в версии, понятные для SQL Server и Oracle.
Если вы хотите продолжить свой текущий путь, вы можете создать то, что я бы назвал каталогом запросов:
public interface IQueryDirectory
{
ICustomerQueries Customer { get; }
IUserQueries User { get; }
}
public interface ICustomerQueries
{
string Customers { get; }
string CustomersById { get; }
}
public interface IUserQueries
{
string Users { get; }
string UsersById { get; }
}
Пример реализации:
public abstract class QueryDirectory : IQueryDirectory
{
private ICustomerQueries customer;
private IUserQueries user;
public ICustomerQueries Customer
{
get { return customer; }
}
public IUserQueries User
{
get { return user; }
}
protected QueryDirectory(ICustomerQueries customer, IUserQueries user)
{
this.customer = customer;
this.user = user;
}
}
public class SqlServerQueryDirectory : QueryDirectory
{
public SqlServerQueryDirectory(SqlServerCustomerQueries customer,
SqlServerUserQueries user) : base(customer, user) {}
}
public class SqlServerCustomerQueries : ICustomerQueries
{
public string Customers
{
get "some sql";
}
public string CustomersById
{
get "some sql";
}
}
Затем вы можете создать каталоги отдельно для каждой базы данных. Но, честно говоря, я действительно очень рекомендую использовать ORM.