Regarding variables, you can assign an instance of any subclass of Database to a single variable of type Database. You will not keep instances of the different database types
at the same time, you will just be able to keep an instance of any of the subclasses (but just one at any given time).
Tried the repro below and didn't get a noticeable slowdown in the call to LoadDataset. Can you try it on your end? You will probably need to fix the code layout...
Database db =
Source=(local)\sqlexpress;Initial Catalog=Northwind;Integrated Security=True");
connection = db.CreateConnection())
DataSet dsResult =
DbCommand dbCommand = db.GetSqlStringCommand(@"select
* from Customers");
// Retrieve the initial data
DataTable table = dsResult.Tables;