У меня есть простой оператор SQL для вставки формы:Почему «вставить (...) значения (...)» не вставить новую строку?
insert into MyTable (...) values (...)
Он используется несколько раз для вставки строк и обычно работает, как ожидалось. Он вставляет ровно одну строку в MyTable, которая также является значением, возвращаемым оператором Delphi AffectedRows: = myInsertADOQuery.ExecSQL.
Через некоторое время возникла временная проблема подключения к сети. В результате другие потоки того же приложения воспринимаются EOleExceptions (Ошибка соединения, -2147467259 = неуказанная ошибка). Позже сетевое соединение было восстановлено, эти потоки снова подключены и были в порядке.
Нить, ответственная за выполнение инструкции вставки, описанную выше, однако, не воспринимала проблемы с подключением (без исключений) - возможно, она просто не выполнялась, когда сеть была отключена. Но после проблем с подключением к сети myInsertADOQuery.ExecSQL всегда возвращал 0, и никакие строки больше не были добавлены в MyTable. После перезапуска приложения оператор insert снова работал, как ожидалось.
Для SQL Server существует ли какой-либо определенный случай, когда элемент вставки, подобный приведенному выше, не должен вставлять строку и возвращать 0 в качестве числа затронутых строк? Первичный ключ - это автогенерированный GUID. Нет никаких уникальных ограничений или ограничений проверки (это должно привести к исключению в любом случае, а не к вставке строки).
Существуют ли известные ошибки ADO (Provider = SQLOLEDB.1)?
Любые другие объяснения этого поведения?
Thanks, Nang.
Вы проследили результат с помощью инструмента профилирования SQL, который поставляется с SQL Server? В первом ответе на этот вопрос есть видео, объясняющее, как это сделать: http://stackoverflow.com/questions/504326/trace-file-how-to-use-it –
Нет, я этого не делал. Спасибо за подсказку. Если это произойдет снова, я попробую. – nang