Interesting that this thread is back alive after a year.
The SqlDataAdapter will automatically take care of opening and closing the connection, but the others such as SqlCommand do not. The adpater is a nice and easy to use component, but on the down side, it is a heavy class. If you need high throughput, consider using a DataReader.
It is better to keep the connection string as a global var than an SqlConnection. It is better to create new, open, use, and dispose of an SqlConnection instance because connections can be broken when you least expect it.
However, sometimes, you do need to keep a connection open for an extended period of time when building things like mass data transports. Consider a process where 100 rows per second need to be transferred from a socket into a database. Creating 100 SqlConnections per second doesn't work (for very long

.
Most commercial applications use a Data Access Layer (DAL) class to manage their database requirements. This is usually a static class which makes it available to all forms and classes in the entire application. A DAL also decouples your application from a specific DBMS. If your company decides to move to a different or newer version of the DBMS , (if written correctly) all that needs to change is the DAL class which lowers the cost because there is minimal regression testing.
Well, off my soap box, have a Happy New Year