If you are making use of the using block, you don't need to explicitly call Close, because that will be called as a part of Dispose for you at the end of the using block.
* Calling Close on a connection object enables the underlying connection to be pooled.
* Calling Dispose on a connection alleviates the need for you to call Close on it explicitly. It not only ensures that the underlying connection can be pooled, but it also makes sure that allocated resources can now be garbage collected.
* Not calling either Close or Dispose will effectively kill your application performance by increasing the connection pool to a maximum limit, and then everyone will have to wait for the next available connection object. Not only that, but even when the open connection fall out of scope, they won't be garbage collected for a relatively long time because the connection object itself doesn't occupy much memory-and the lack of memory is the sole criterion for the garbage collector to kick in and do its work.
In short, Dispose is the best option as it helps garbage collection and connection pooling, Close is second best option as it helps only connection pooling, and not calling either Close or Dispose is so bad that you shouldn't even go there.