C# - Une classe Générique de connexion de base de données, de commande, lecteur

Suppose que je suis en train de concevoir une classe qui peut gérer n'importe quelle technologie de base de données pour créer une connexion, exécutez la commande et de récupérer des données, etc.

Si j'ai besoin de créer une base de données générique de la manipulation de classe pour les Sgbdr (comme SQL Server, Oracle, FireBird, et.), qui .net abstrait-classe/Interface devrais-je utiliser {DbConnection, DbCommand, DbParameter,...} ou {IDbConnection, IDbCommand IDbParameter,...}?

Dois-je utiliser le code comme

public bool CreateConnection(DatabaseTypeEnum type)
{
    DbConnection conn ;

    if(type==DatabaseTye.Oracle)
    {
        //....
    }    
}

public DbDataReader GetData()
{

    DbCommand comm;
    //...
}

ou,

public bool CreateConnection(DatabaseTypeEnum type)
{
    IDbConnection conn ;

    if(type==DatabaseTye.Oracle)
    {
        //....
    } 
}

public IDbDataReader GetData()
{

    IDbCommand comm;
    //...
}

Et, Pourquoi?

Êtes-vous meanig à se poser: Quand dois-je créer un générique ...? et pourquoi?
Veuillez consulter les mises à jour question.
Il est recommandé de programme à l'aide de l'Interface et non pas l'exacte mise en œuvre. Donc, dans vos codes, la 2ème option est préférable. Discussion similaire a été discutée dans le Débordement de la Pile : stackoverflow.com/questions/383947/... stackoverflow.com/questions/570302/when-are-interfaces-needed
Être prudent sur l'utilisation du mot "Générique" pour parler de C#, car elle a un sens très précis sans rapport avec cette question.

OriginalL'auteur user366312 | 2009-07-10