What you are trying to do is Covariance and Contravariance in Generics, but that did not come out until .NET 4.0.
[Update] It appears that casting from [DbConnection] to [SqlConnection] could leave out a few parameters, so Microsoft does not allow simple casts.
If you really want to get it done, check out this thread on SO with some good How To code: