Sleeping connections
In the c# code you posted the connection is only closed if it is 'Open', if the state was 'Connecting', 'Broken', 'Executing' or 'Fetching' it would be left open. It is standard practice in c# wrap your db connection in a using statement, this will make sure the connection is always properly disposed of, without the need to call connection.Close.

Here is an example where a stored proc is called from a connection with a using:

using (SqlConnection connection = new SqlConnection(connectionString)) 
{
    try    
    {
        connection.Open();
        SqlCommand command = new SqlCommand("StoredProcName", connection);
        command.CommandType = CommandType.StoredProcedure;
        command.Parameters.Add(new SqlParameter("@SomeID", someID));
        command.ExecuteNonQuery();    
    } 
    catch (Exception) 
    { 
        /*Handle error*/ 
    }
}