2016-11-08 10 views
0

Вот некоторые 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 игнорирует ошибку после обновления?

+1

Высказывание * «Ошибка игнорирования ADO» * немного самонадеянно, более вероятно, что поставщик SQL Server, использующий ADODB, по какой-то причине не вызывает инструкцию 'THROW'. Помните только, что он работает из SSMS, это не значит, что он будет работать с ADODB в первый раз, но тестирование запросов в SSMS - это начало. Просто постарайтесь не подходить к выводам, пока не получите убедительные доказательства. – Lankymart

+0

Вы вызываете 'SET NOCOUNT ON', чтобы убедиться, что вы получили правильный результат для' @@ ROWCOUNT'? – Lankymart

+0

Да, вопрос самонадеян. Хорошая мысль. Я решил, что «SET NOCOUNT ON» исправляет проблему. Однако даже без него '@@ ROWCOUNT' по-прежнему работает при вызове из ASP, и я доказал это, вернув его правильное значение ASP через параметр OUT в хранимой процедуре. Поэтому я считаю, что моя «гипотеза» до сих пор не опровергнута. –

ответ

1

Я добавил SET NOCOUNT ON в начало хранимой процедуры.

Here, он говорит ...

SET NOCOUNT ON предотвращает отправку сообщений DONE_IN_PROC клиенту для каждого оператора в хранимой процедуре.

Таким образом, возможно, сообщение DONE_IN_PROC приводит к тому, что последующая ошибка пропускается.