Это должно работать также:
DELETE FROM [table] INNER JOIN (SELECT [id] FROM (SELECT [id] FROM [table] ORDER BY [id] DESC LIMIT N) AS Temp) AS Temp2 ON [table].[id] = [Temp2].[id]
Это потому, что вы не написали
xDoc.Load(File.FullName);
внутри блока try. Это причина, по которой исключение не было обработано.
Другой ответ о помещении Load () в блок try верен, но фактически не объясняет почему SelectNodes () «кажется» выбрасывает исключение XmlException, которое не перехватывается.
Фактический ответ заключается в том, что отладчик запутался / не синхронизирован с вашим исходным кодом и фактически показывает неправильную строку как вызывающую исключение.
Он действительно должен указывать на xDoc.Load (File.FullName); , и в этом случае будет ясно, что этот вызов должен находиться внутри блока try.
Почему? Обратите внимание на XmlLoader.LoadNode () в последней строке трассировки стека. В .NET Reflector вы можете видеть, что метод XmlDocument.Load () (глубоко в его недрах) вызывает метод LoadNode ().
Однако и в отражателе видно, что метод SelectNodes () не вызывает LoadNode () в любом месте его внутренней реализации.
Таким образом, согласно трассировке стека, исключение не могло быть вызвано SelectNodes ().
Я видел, как отладчик запутался, как это раньше, когда производилось изменение кода и отладка началась, но символы отладки не обновлялись правильно. Попробуйте очистить и пересобрать свое решение, чтобы обновить символы отладки.