You can use local connections (i.e. local to the method); with a pool of connections, the benefits of keeping in touch as fields are minimal and regularly cause this type of ... fun. Of course, you may run into problems blocking yourself if you are editing data, possibly softening them using TransactionScope . Example below ...
Alternatively, you can enable MARS (multiple active result sets) in the connection; who should do it. Just include "MultipleActiveResultSets = True" as a pair in the connection string (SQL Server 2005 and later).
public void FirstMethod() { using (var connection = CreateAndOpenConnection()) using (var command = connection.CreateCommand()) { command.CommandText = "..."; using (var reader = command.ExecuteReader()) {
source share