Vad du bör titta på att göra är att antingen använda ett ORM-verktyg som abstraherar databasen åt dig (nHibernate), eller definiera en uppsättning gränssnitt som representerar din DAL och sedan använda en IoC-implementering (Ninject, Castle, etc) för att byta ut den underliggande implementering efter behag, så länge den implementerar gränssnittet.
Men att designa ett gränssnitt som är framtidssäkert (dvs. kan klara av subtila egenheter med att arbeta med andra databaser) är inte enkelt, så du kan behöva göra ändringar ändå.
Jag skulle göra en av två saker, i denna ordning:
- Granska om du verkligen behöver byta ut databaser.
- Gå längs ORM-verktygsvägen eftersom mycket benarbete görs för dig.
Ett bra exempel på att abstrahera en databas, inte nödvändigtvis DAL i sig, är Enterprise Library Data Access Application Block från Microsoft.