If I wrap a SQLConnection in a Using, should I close it or does the end using handle it?
using cn as new system.data.sqlclient.sqlconnection()
cn.open
using is just a shorthand to try/finally. this is equivilent code to what you posted
Try
SqlConnection cn as new system.data.sqlclient.sqlconnection()
cn.open
'{do a bunch of other stuff with commands and datareaders here}
cn.close 'Do I need this?
Finally
cn.Dispose()
End Try
Dispose is supposed to take care of all resource cleanup, in the case of connections it will close it.