Я бегу следующий SQL запрос из LabVIEW, графического языка программирования, с помощью встроенного в возможности он имеет для подключения к базе данных:Почему набор записей, возвращаемый этим запросом, имеет статус «закрыто»?
DECLARE @currentID int
SET @currentID = (SELECT MIN(ExperimentID) FROM Jobs_t WHERE JobStatus = 'ToRun');
UPDATE [dbo].[Jobs_t]
SET [JobStatus] = 'Pending'
WHERE ExperimentID = @currentID;
SELECT @currentID AS result
Это аналогичный код основной() является C-подобным языком. Первый блок, в который входит провод «Информация о подключении», открывает файл .udl и создает ссылку ADO.NET _Connection, которая позже используется для вызова методов запроса.
Это внутри второго блока, один с «EXE» и розовыми проводами вдаваясь в него. Ящики с серой рамкой работают так же, как «переключающие» заявления. Провод, идущий в "?" терминал в этих блоках определяет, какой случай выполняется. Желтые поля с белыми прямоугольниками, сбрасывающимися вниз, вызывают узлы и узлы свойств; они принимают ссылку на объект и позволяют вам вызывать методы и читать/записывать свойства этого объекта. Здесь вы также можете увидеть объект _Recordset.
Вот следующий блок будет выполнен, один значок которого гласит: «FETCH ALL». Мы видим, что первое, что нужно выполнить в левом верхнем углу, захватывает некоторые свойства набора записей и возвращает их в «структуру» (розовый провод, который входит в поле, которое читает «состояние»). Здесь код не работает. Набор записей, открытый в предыдущем VI (виртуальном инструменте), имеет статус «закрыто», а пурпурный вариант (см. «Читать все доступные данные») возвращается пустым.
Остальная часть кода довольно неуместна, поскольку она просто преобразует полученный вариант в пригодные для использования данные и освобождает ссылку на набор записей, открытую ранее.
Мой вопрос: почему статус из запроса набора записей будет «закрыт»? Я понимаю, что наборы записей «закрыты», когда запрос не возвращает строк, но выполнение этого запроса в SSMS возвращает строки. Кроме того, выполнение кода LabVIEW делает UPDATE в запросе, поэтому я знаю, что это тоже не нарушено.
Любые рекомендации по этому вопросу были бы весьма полезными. Не стесняйтесь задавать вопросы о вещах в LabVIEW; У меня нет никаких проблем с предоставлением вам столько информации, сколько необходимо для правильной оценки.
Я думаю, что из примера кода сверху вы должны увидеть где-то между 1 и 3 наборами записей. Последняя строка 'SELECT' в вашем коде должна возвращать одну запись, даже если' @ currentid' имеет значение NULL. Вы пробовали добавить полуточку до конца? Вы управляли выполнением нескольких операторов SQL раньше? что произойдет, если вы запустите этот SQL в SSMS (SQL Server Management Studio)? –
Как я уже говорил в параграфах предыдущих параграфов, выполнение в SSMS работает так, как ожидалось.Код LabVIEW также работает по большей части; обновление работает правильно, это просто окончательный выбор, который не работает. Я пробовал все, точку с запятой/точку с запятой, go/no go, даже бросая фиктивные строки в select, чтобы точно убедиться, что это не было причиной закрытого статуса. До сих пор нет кубиков. – ijustlovemath
Прошу прощения, я слишком быстро пропустил ваше объяснение. Вы говорите, что он возвращает «строки» ... вы имеете в виду «ряд»? Там будет только один выбор, и он вернет ровно одну строку. Не будучи педантичным, я просто не вижу, что вы видите. Я не знаю, как работает интерфейс Labviews SQL, но вы просто попробовали «SELECT 1 как column1;» самостоятельно, чтобы убедиться, что этот набор записей также закрыт? затем верните исходный запрос. У вас есть другие похожие запросы, которые работают? –