title: CA2000 object 'comm' is not disposed along all exception paths
body: <p>I have a bunch of methods like so in my DAL in VS 2010. When I run the "new" Code Analysis option i get the message - Warning   CA2000  object 'comm' is not disposed along all exception paths. Call System.IDisposable.Dispose on object 'comm' before all references to it are out of scope.</p>
  
  <p>I understand I could use another using statement for the SQLCommand however if prefer to do it like I have with the Try/Finally block. My understanding is the Finally block executes last and does the cleanup. Does anyone see anything wrong here with my dispose call?    </p>
  
  <pre><code>  public List&lt;Product&gt; GetAllProducts()
      {
  
          List&lt;Product&gt; prodList = new List&lt;Product&gt;();
          using (SqlConnection connection = new SqlConnection(GetConnection()))
          {
              SqlCommand comm = new SqlCommand("GetAllProducts", connection);
              connection.Open();
              comm.CommandType = CommandType.StoredProcedure;
              SqlDataReader dr = comm.ExecuteReader();
              try
              {
                  while (dr.Read())
                  {
                      Product obj = new Product();
                      obj.ProductID = Convert.ToInt32(dr["ProductID"].ToString());
                      obj.Product = dr["Product"].ToString();
                      //etc....                                                                       
  
                      prodList.Add(obj);
                  }
              }
              finally
              {
                  comm.Dispose();
                  dr.Close();
              }
          }
  
          return prodList;
      }
  
  }
  </code></pre>