If you need to stop a datareader in the middle, instead of at the end, you have to call cancel on the command object. Calling the Close() method will result in a timeout exception.
using (SqlCommand cmd = new SqlCommand(sql, conn))
XmlReader reader = cmd.ExecuteXmlReader();
holder = reader.ReadOuterXml();