我使用图形编程语言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"粉红色的线进入它。带有灰色边框的盒子非常像"开关"声明。电线进入"?"这些盒子上的终端确定哪个案例被执行。白色矩形下拉的黄色框是调用节点和属性节点;它们接受对对象的引用,并允许您调用该对象的方法和读/写属性。你也可以在这里看到_Recordset对象。
这是下一个要执行的块,其图标为" FETCH ALL"。我们看到在最左边执行的第一件事是抓取记录集的一些属性,并将它们返回到" struct" (粉红色的线进入框中,读出"状态")。这是代码失败的地方。在上一个VI(虚拟乐器)中打开的记录集的状态为"已关闭",紫色变体(在"阅读所有可用数据"中看到)返回空白。
其余代码相当无关紧要,因为它只是将收到的变量转换为可用数据,并释放先前打开的记录集引用。
我的问题是,为什么记录集查询的状态会被关闭"?我意识到记录集是关闭的#34;当查询没有返回任何行时,但在SSMS中执行该查询会返回行。此外,执行LabVIEW代码会在查询中执行UPDATE,因此我知道它也没有被破坏。
非常感谢有关此问题的任何指导。随意在LabVIEW中询问有关事物的问题;我毫不费力地为您提供所需的信息,以便进行适当的评估。
答案 0 :(得分:2)
我在LabVIEW subreddit上发布了这个,结果证明数据库连接VI对批处理查询不是很好。我切换到使用OdbcConnection,OdbcCommand和OdbcDatareader类的方法和属性来实现我想要的。如果您有兴趣,可以使用以下代码:
答案 1 :(得分:1)
首先,我建议你为此编写一个存储过程。其次,你的drivers (ODBC)是最新的吗?第三,我认为您可以通过在forums.ni.com或lavag.org上发布您的问题来获得更好的帮助。最后,也许这个topic有一个可以帮助你的答案。