I personally think you should learn about DataTables as well particularly for your outermost loop, see:http://www.learnasp.com/freebook/learn/datatable.aspx

datareaders need 1 connection each. 6 datareaders in a loop, 6 connections needed. As long as they have their own connections you can have as many as you want. DataTables fill and ditch their connection, so you could have 6 datatables all from 1 connection.

Heres is your larger program rewritten with Utility Belt to reduce code size, simplify nesting and improve error trapping. This sort of addresses the issue of using datatables instead of datareaders for simplifed nesting.