Ne znam koliko ti ovo resenje igra, ali mozes da iskoristis ODBC.NET data provider i u data layeru iskoristis OdbcConnection, OdbcCommand, OdbcDataAdapter i ostale klase iz System.Data.Odbc namespace-a, u zavisnosti od potrebe.
ODBC connection stringovi ce ti se razlikovati za razlicite engine, ali ce tvoj kod biti isti u svim slucajevima jer ce native ODBC drajver za bazu raditi neophodne konverzije, dakle ne treba ti engine specific instanciranje, interfejsi i ostala cudesa. Sve baze koje si pomenuo plus jos drugih imaju svoje ODBC drajvere.
Naravno ovo sve pod uslovom da je ODBC standard dovoljan za tvoje potrebe, posto on radi svodjenje baza na najveci zajednicki delilac

i ne daje neke specificnosti koje native .NET drajveri daju. ALi ako se tvoje potrebe svode na select/insert/update/delete onda moze da ti odradi posao.
▪ "Why isn't my wireless mouse connected to the computer?" - 2008 Dumbest Technical Support Question award
▪ The word 'politics' is derived from the word 'poly', meaning 'many', and the word 'ticks', meaning 'blood sucking parasites' - Larry Hardiman
▪ If the good guy gets the girl, it's rated PG; if the bad guy gets the girl, it's rated R; and if everybody gets the girl, it's rated X