I would agree, with the exception of MySQL (although, they can barely take credit for that, in their defense at least they haven't screwed it up yet).
My SQL Server experience for the most part has been fairly painless. Oracle on the other hand is one gotcha after another (their ADO.NET provider is horrid, why you need 500MB of files installed locally is beyond me... you can connect to MySQL with it's ADO.NET provider with a 350K library). One of the assemblies I had to include to connect to Oracle was 128MB itself (oraociei11.dll, 127,196KB ). Seriously...
My favorite quark of the Oracle ADO.NET provider is the fact that you have to explicitly tell the OracleCommand object that you want to "BindByName" when referencing parameters. Every other provider is smart enough to figure out that if you pass it a string, you're referencing the name (it's 2013 after all, shouldn't it all be that easy? ). Not Oracle though. To complicate that, they don't say "String not accepted, etc..", they just ignore what you pass in as the name and try to bind it to whatever the next unbinded parameter is (where you will eventually get type mismatch exception and scratch your head wondering why it's telling you that your date variable isn't a date.. that's assuming the data doesn't just go into the wrong fields unless you happened to add them all in the correct order).
Anyway, end rant.