Итак, что вы делаете, так это располагаете ридер и устанавливаете его в null.
После этого вы делаете то же самое в блоке finally.Блок finally всегда запускается, даже если попытка завершается неудачно и входит в блок catch.Поэтому нет необходимости иметь
reader.DetachStream();
reader = null;
в вашем блоке try.просто удалите его из блока try, и проверка качества базы кода перестанет жаловаться.