【发布时间】:2015-10-07 22:45:56
【问题描述】:
我正在使用图形化编程语言 LabVIEW 运行以下 SQL 查询,并使用它具有的数据库连接功能:
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
这是类似于 main() 的代码,是一种类 C 语言。第一个块,其中包含“连接信息”线,打开一个 .udl 文件并创建一个 ADO.NET _Connection 引用,稍后用于调用查询方法。
这是第二个块的内部,带有“EXE”和粉红色线的那个块。带有灰色边框的框的操作很像“switch”语句。电线进入“?”这些框上的终端确定执行哪种情况。带有白色矩形下拉的黄色框是调用节点和属性节点;它们接受对对象的引用,并允许您调用该对象的方法和读/写属性。您也可以在这里看到 _Recordset 对象。
这是要执行的下一个块,其图标为“FETCH ALL”。我们看到在最左边执行的第一件事是获取记录集的一些属性,并将它们返回到“结构”(进入读取“状态”的框的粉色线)。这是代码失败的地方。在之前的 VI(虚拟仪器)中打开的记录集状态为“关闭”,而紫色变体(在“读取所有可用数据”下显示)返回为空。
代码的其余部分无关紧要,因为它只是将接收到的变体转换为可用数据,并释放之前打开的记录集引用。
我的问题是,为什么记录集查询的状态会是“关闭”?我意识到当查询不返回任何行时记录集是“关闭的”,但在 SSMS 中执行该查询会返回行。此外,执行 LabVIEW 代码会在查询中执行 UPDATE,所以我知道这也没有损坏。
我们将不胜感激有关此问题的任何指导。随意询问有关 LabVIEW 的问题;我可以毫不费力地为您提供进行适当评估所需的尽可能多的信息。
【问题讨论】:
-
我猜从顶部的代码示例中您应该会看到 1 到 3 个记录集之间的任何位置。即使
@currentid为空,代码中的最后SELECT行也应返回一条记录。您是否尝试过在末尾添加分号?您以前是否设法执行多语句 SQL?如果您在 SSMS (SQL Server Management Studio) 中运行此 SQL 会发生什么? -
正如我在最后几段中所说的,SSMS 中的执行按预期工作。 LabVIEW 代码在大多数情况下也可以工作。更新工作正常,只是最终选择不起作用。我已经尝试了一切,分号/没有分号,去/不去,甚至在选择中加入虚假行以确保这不是关闭状态的原因。到目前为止,没有骰子。
-
很抱歉,我跳过你的解释有点太快了。你说它返回“行”......你的意思是“行”吗?那里只有一个选择,它将恰好返回一行。不迂腐只是因为我看不到你所看到的。我不知道 Labviews SQL 接口是如何工作的,但您是否刚刚尝试过
SELECT 1 as column1;以查看该记录集是否也已关闭?然后回到原来的查询。您还有其他类似的查询有效吗? -
对不起,我的意思是行!我添加了一个 SELECT 1 以确保查询返回一行,但还没有自己完成。一旦我可以访问我的工作站,我一定会立即尝试。
-
如果你的意思是行s...那没有意义,因为该代码块只返回一行。
标签: .net sql-server ado labview