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.
▪ The quicker a phone is answered in sales, the slower it's answered in customer services - Brownridge's Law
▪ Democracy is a device that ensures we shall be governed no better than we deserve - George Bernard Shaw
▪ To err is human--and to blame it on a computer is even more so - Robert Orben