Мы делаем это на работе. У нас есть собственный DAL и поддержка Access, SQL и Oracle. Мы используем несколько форм запросов, но в центре вашего вопроса мы храним их в XML-файлах. В зависимости от того, как вы пишете запросы, будет зависеть, насколько вам это сложно. Ниже приведен пример того, как вы можете хранить запросы для извлечения.
<Command ID = "3">
<Provider = "Default">
<QueryText>
Select * from MyTable
</QueryText>
</Provider>
<Provider = "Oracle">
<QueryText>
Select * from dual
</QueryText>
</Provider>
<Command>
Затем, когда вы идете, чтобы запустить свой запрос в приложении - вы вызываете текст на основе вашего провайдера. Если вам нужен специальный запрос для провайдера - ваш код должен быть в состоянии получить правильный узел.
Самый простой способ сделать это - реализовать его с использованием универсальных интерфейсов IDB по мере необходимости.
Вот хорошее объяснение того, как этого можно достичь.
http://stevencalise.wordpress.com/2009/10/16/constructing-a-dal-in-c/
Все это, как говорится, действительно зависит от того, какой контроль над вашим DAL вам нужен. В некоторых ситуациях инструмент ORM будет работать лучше, но вам необходимо подтвердить поддержку данных. Вы также должны быть осторожны с поставщиками данных, когда речь идет о битовом уровне (32 против 64 бит) при работе с Access и / или Oracle. SQL гораздо более щадящий.