Hvad du bør se på at gøre er enten at bruge et ORM-værktøj, der abstraherer databasen for dig (nHibernate), eller definere et sæt grænseflader, der repræsenterer din DAL og derefter bruge en IoC-implementering (Ninject, Castle, osv.) til at udskifte den underliggende implementering efter behag, så længe den implementerer grænsefladen.
At designe en grænseflade, der er fremtidssikret (dvs. kan klare de subtile særheder ved at arbejde med andre databaser) er ikke enkel, så du kan ende med at skulle foretage ændringer alligevel.
Jeg ville gøre en af to ting i denne rækkefølge:
- Gennemse, om du virkelig skal udskifte databaser.
- Gå ned ad ORM-værktøjsruten, da der bliver gjort en masse benarbejde for dig.
Et godt eksempel på at abstrahere en database, ikke nødvendigvis DAL i sig selv, er Enterprise Library Data Access Application Block fra Microsoft.