Я считаю, что это самый важный момент, который вы должны иметь в виду:
Ваша процедура не должна возвращать ошибку при возникновении ошибки при обработке счета-фактуры: поскольку счет-фактура является элементом деловой программы в вашей программе, это следует рассматривать как «ожидаемую» или «поддающуюся объяснению» ошибку, которая должна корректно обрабатываться.
Другими словами, вы должны использовать возвращаемые параметры, в этом случае, чтобы вернуть номер ошибки и, возможно, описание ошибки обратно вызывающей стороне, в то же время позволяя вам получить набор результатов. Или, что еще лучше, наличия «неудачного счета-фактуры» в наборе результатов должно быть достаточно для вызывающего метода, чтобы определить, что что-то пошло не так ...
Чтобы ответить на ваш вопрос, да, я считаю, что DataAdapter сбрасывает поток результатов, как только обнаруживает ошибку (хотя и не уверен!) ....
Я также полагаю, что у вас будет такая же проблема с вызовом, использующим команду ADO и соединение ....
Просто всегда имейте это в виду: если вы можете предсказать, что ошибка МОЖЕТ произойти в процедуре (более влажный SQL или на любом языке программирования), вы не должны допускать возникновения ошибки, но обрабатывайте ее там и используйте возвращаемые параметры для сообщить вызывающему методу, что что-то пошло не так.
Так что я бы переписал ваш SQL-процесс:
1) Сохраните ваш набор результатов в табличной переменной
2) поймать ошибку
3) сохранить информацию об ошибке в возвращаемых параметрах
4) откатить проц
5) Сгенерировать набор результатов из таблицы переменных
После этого вы сможете получить сообщение об ошибке и # из ваших выходных параметров, PLUS получить ваш набор результатов. Но опять же, набор результатов, содержащий ошибки, должен быть достаточным для того, чтобы вызывающий метод обнаружил, что произошла ошибка «ОЖИДАЕМЫЕ» ....
Я знаю, что это не идеальное или законченное решение, но как общая идея, оно должно работать!