Maybe this will shed some light on the subject.
I create an array of object[] that is populated by the current row when using the GetValues method of the SQLDataReader.
I have a set of constants to identify specif columns from the row, however you can use quoted column names instead.
A nice little trick is to save the entire row into the TAG property of my treeview as shown below. while ...Read() is the same thing as while not data.eof.
Have fun,
Jerry
SqlDataReader ogRdr = command.ExecuteReader();
while (ogRdr.Read())
{
Object[] values = new Object[ogRdr.FieldCount];
ogRdr.GetValues(values);
node = treeOperGroup.Nodes.Add((string)ogRdr[COL_OPERGROUPNAME]);
node.Tag = values;
}