What you need can be found on the System.Data.Common
namespace, and consists in a series of classes designed specifically to deal with that kind of requisite.
The classes in there, use a Design Pattern called Abstract Factory, the main idea is that your connection string provides to the abstract factory the provider, i.e, SQL Client or Oracle Client, and based on that abstract factory can create a specific factory to generate connections to talk with a specific database engine. Enough talking, this is the code:
string providerName = ConfigurationManager.ConnectionStrings["DbConn"].ProviderName;
string connectionString = ConfigurationManager.ConnectionStrings["DbConn"].ConnectionString;
DbProviderFactory factory = DbProviderFactories.GetFactory(providerName);
DbConnection connection = factory.CreateConnection();
connection.ConnectionString = connectionString;
You can read more about that here.
About the abstraction you require, I recommend you to do the following, implement all your classes to access your data model first, then extract the interfaces from those classes.
Implement you Business Layer code relying on those interfaces, and use the Abstract Factory design pattern to create the concrete implementation classes behind the scenes.
There is a good answer here in SO regarding Abstract Factories, give it a look.
Also bear in mind that if you use the Abstract Factories, you can have the both of the two worlds, this is, you can have a Generic Provider that talks to the most part of you databases, and you can have a specific one just for Oracle.
The generic provider is the one using DbConnection objects, this works for all databases. But sometimes you may want to take most value of a specific database, imagine you install your system in a topology where in some machines it has a dedicate oracle just for you app, and you want the code to be very efficient there. Then for that configuration you can use the provider specific for Oracle, the beautiful thing about abstract factories is that they let you use your concrete types, as long as your upper layers code just talks through interfaces.
Ultimately for the Abstract Factories you can have a setting in your web or app.config indicating what mode do you want, something like "Generic", "OracleSpecific", "SqlServerSpecific". This values are just convention you can create your own.