I'm assuming that you're trying to use the SQL example as-is but with Oracle's ODP.NET client. If so, I have a possible solution (hack) for you that should work. Unfortunately, I haven't spent a ton of time trying to understand why.
From what I noticed, the "GetFactory" (the one from Systen.Data.Common.DbProviderFactories) method has two overloads... one that takes a string and one that takes a DataRow. I've seen problems where the string version throws an error (something like "registered provider not loaded" or "provider failed to load" ... make sure it's installed). The DataRow version does NOT appear to have this problem.
So, the hack is basically to use the "GetFactoryClasses" method to return a DataTable (a bunch of DataRow objects). Next, find the row where the provder name matches the one you want. Finally, pass the actual DataRow into the GetFactory() method.
Again, I haven't spent a ton of time looking at this. I just know that the DataRow version works. Maybe it has something to do with the complete info being passed in (public token, version, etc.).
Good luck! =)
DataTable factories = DbProviderFactories.GetFactoryClasses();
foreach (DataRow row in factories.Rows)
if (row.ToString().Equals(_dataProviderName, StringComparison.OrdinalIgnoreCase))
_factory = DbProviderFactories.GetFactory(row);