Вот некоторые SQL ...ADO возможно игнорируя ошибку из SQL Server
UPDATE table1 SET date = GETDATE() WHERE id = @id
IF @@ROWCOUNT = 0
BEGIN;
THROW 50004, 'Row not updated.', 1;
END
Если я запускаю это в Management Studio с поддельным идентификатором, я получаю ...
(0 строк (s)) Msg 50004, уровень 16, состояние 1, процедура MyStoredProcedure, строка 50 Строка не обновлена.
Если я запустил это из ASP Classic, Err.Number
равен 0, а сбор ошибок подключения пуст.
Если я удалю оператор UPDATE
, ошибка регистрируется.
Почему ADO игнорирует ошибку после обновления?
Высказывание * «Ошибка игнорирования ADO» * немного самонадеянно, более вероятно, что поставщик SQL Server, использующий ADODB, по какой-то причине не вызывает инструкцию 'THROW'. Помните только, что он работает из SSMS, это не значит, что он будет работать с ADODB в первый раз, но тестирование запросов в SSMS - это начало. Просто постарайтесь не подходить к выводам, пока не получите убедительные доказательства. – Lankymart
Вы вызываете 'SET NOCOUNT ON', чтобы убедиться, что вы получили правильный результат для' @@ ROWCOUNT'? – Lankymart
Да, вопрос самонадеян. Хорошая мысль. Я решил, что «SET NOCOUNT ON» исправляет проблему. Однако даже без него '@@ ROWCOUNT' по-прежнему работает при вызове из ASP, и я доказал это, вернув его правильное значение ASP через параметр OUT в хранимой процедуре. Поэтому я считаю, что моя «гипотеза» до сих пор не опровергнута. –