Suppose I am designing a class that can handle any database technology to create a connection, execute command and retrieve data, etc.
If I need to create a generic database handling class for existing RDBMSs (like SQL Server, Oracle, FireBird, et.), which .net abstract-class/Interface should I use {DbConnection, DbCommand, DbParameter,...} or {IDbConnection, IDbCommand, IDbParameter,...}?
Should I use the code like
public bool CreateConnection(DatabaseTypeEnum type)
{
    DbConnection conn ;
    if(type==DatabaseTye.Oracle)
    {
        //....
    }    
}
public DbDataReader GetData()
{
    DbCommand comm;
    //...
}
or,
public bool CreateConnection(DatabaseTypeEnum type)
{
    IDbConnection conn ;
    if(type==DatabaseTye.Oracle)
    {
        //....
    } 
}
public IDbDataReader GetData()
{
    IDbCommand comm;
    //...
}
And, Why?
 
     
     
     
    