2015-10-07 1 views
3

Я бегу следующий 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 

enter image description here

Это аналогичный код основной() является C-подобным языком. Первый блок, в который входит провод «Информация о подключении», открывает файл .udl и создает ссылку ADO.NET _Connection, которая позже используется для вызова методов запроса.

enter image description here

Это внутри второго блока, один с «EXE» и розовыми проводами вдаваясь в него. Ящики с серой рамкой работают так же, как «переключающие» заявления. Провод, идущий в "?" терминал в этих блоках определяет, какой случай выполняется. Желтые поля с белыми прямоугольниками, сбрасывающимися вниз, вызывают узлы и узлы свойств; они принимают ссылку на объект и позволяют вам вызывать методы и читать/записывать свойства этого объекта. Здесь вы также можете увидеть объект _Recordset.

enter image description here

Вот следующий блок будет выполнен, один значок которого гласит: «FETCH ALL». Мы видим, что первое, что нужно выполнить в левом верхнем углу, захватывает некоторые свойства набора записей и возвращает их в «структуру» (розовый провод, который входит в поле, которое читает «состояние»). Здесь код не работает. Набор записей, открытый в предыдущем VI (виртуальном инструменте), имеет статус «закрыто», а пурпурный вариант (см. «Читать все доступные данные») возвращается пустым.

Остальная часть кода довольно неуместна, поскольку она просто преобразует полученный вариант в пригодные для использования данные и освобождает ссылку на набор записей, открытую ранее.

Мой вопрос: почему статус из запроса набора записей будет «закрыт»? Я понимаю, что наборы записей «закрыты», когда запрос не возвращает строк, но выполнение этого запроса в SSMS возвращает строки. Кроме того, выполнение кода LabVIEW делает UPDATE в запросе, поэтому я знаю, что это тоже не нарушено.

Любые рекомендации по этому вопросу были бы весьма полезными. Не стесняйтесь задавать вопросы о вещах в LabVIEW; У меня нет никаких проблем с предоставлением вам столько информации, сколько необходимо для правильной оценки.

+0

Я думаю, что из примера кода сверху вы должны увидеть где-то между 1 и 3 наборами записей. Последняя строка 'SELECT' в вашем коде должна возвращать одну запись, даже если' @ currentid' имеет значение NULL. Вы пробовали добавить полуточку до конца? Вы управляли выполнением нескольких операторов SQL раньше? что произойдет, если вы запустите этот SQL в SSMS (SQL Server Management Studio)? –

+0

Как я уже говорил в параграфах предыдущих параграфов, выполнение в SSMS работает так, как ожидалось.Код LabVIEW также работает по большей части; обновление работает правильно, это просто окончательный выбор, который не работает. Я пробовал все, точку с запятой/точку с запятой, go/no go, даже бросая фиктивные строки в select, чтобы точно убедиться, что это не было причиной закрытого статуса. До сих пор нет кубиков. – ijustlovemath

+0

Прошу прощения, я слишком быстро пропустил ваше объяснение. Вы говорите, что он возвращает «строки» ... вы имеете в виду «ряд»? Там будет только один выбор, и он вернет ровно одну строку. Не будучи педантичным, я просто не вижу, что вы видите. Я не знаю, как работает интерфейс Labviews SQL, но вы просто попробовали «SELECT 1 как column1;» самостоятельно, чтобы убедиться, что этот набор записей также закрыт? затем верните исходный запрос. У вас есть другие похожие запросы, которые работают? –

ответ

2

Я разместил это на субредадрете LabVIEW, и выяснилось, что ВП с подключением к базе данных не очень хороши с пакетными запросами. Я перешел к использованию методов и свойств классов OdbcConnection, OdbcCommand и OdbcDatareader для достижения того, что я хотел. Вот код, если вам интересно: http://i.imgur.com/fmDymyu.png

1

Во-первых, я бы рекомендовал вам написать хранимую процедуру для этого. Во-вторых, являются ли ваши drivers (ODBC) актуальными? В-третьих, я думаю, вам может помочь, разместив свой вопрос на forums.ni.com или lavag.org. Наконец, может быть, у этого topic есть ответ, который поможет вам.

+1

Спасибо, я проверю проблему с драйвером. Этот плакат, вероятно, прав; мой сервер не любит несколько операторов. Я пробовал опубликовать это на forums.ni.com без хитов (что странно, учитывая, что я получил почти 100 просмотров). Я должен проверить лаваг, выглядит многообещающим. – ijustlovemath