Проблема в том, что вы пытаетесь установить int с нулем, а не в чтении.Вы можете сделать это, чтобы установить альтернативное значение, если значение, которое вы пытаетесь вставить, равно NULL:
topID = Convert.ToInt32(reader["TopID"]) ?? 0;
Другой альтернативой является то, что вы можете использовать целые числа, допускающие значение NULL, путем инициализации topID следующим образом:
int? topID = 0
но для этого все равно потребуется проверка на нулевое значение в другом месте, а также некоторые другие вещи, которые необходимо обработать, поэтому я бы рекомендовал использовать двойной знак вопроса на вашем наборе значений, как я показал вначале.