.net - 为什么此查询返回的记录集的状态为 "closed"?

标签 .net sql-server ado labview

我正在从 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

enter image description here

这是类似于 C 语言的 main() 的代码。第一个 block 包含“连接信息”线,打开一个 .udl 文件并创建一个 ADO.NET _Connection 引用,稍后用于调用查询方法。

enter image description here

这是第二个 block 的内部,带有“EXE”和粉红色电线进入其中的 block 。带有灰色边框的框的操作方式与“switch”语句非常相似。电线进入“?”这些盒子上的终端决定执行哪种情况。下拉出白色矩形的黄色框是调用节点和属性节点;它们接受对对象的引用,并允许您调用该对象的方法和读/写属性。您还可以在此处看到 _Recordset 对象。

enter image description here

这是下一个要执行的 block ,其图标为“FETCH ALL”。我们看到最左边执行的第一件事获取记录集的一些属性,并将它们返回到“结构”(进入读取“状态”的框的粉色线)中。这是代码失败的地方。在上一个 VI(虚拟仪器)中打开的记录集的状态为“已关闭”,紫色变体(在“读取所有可用数据”下可见)返回为空。

其余代码相当无关紧要,因为它只是将接收到的变体转换为可用数据,并释放之前打开的记录集引用。

我的问题是,为什么记录集查询的状态会是“已关闭”?我意识到,当查询不返回任何行时,记录集将“关闭”,但在 SSMS 中执行该查询会返回行。另外,执行 LabVIEW 代码会在查询中进行更新,因此我知道这也没有损坏。

有关此问题的任何指导将不胜感激。请随意询问有关 LabVIEW 的问题;我可以毫不费力地为您提供做出正确评估所需的尽可能多的信息。

最佳答案

我将其发布在 LabVIEW subreddit 上,结果发现数据库连接 VI 不太适合批量查询。我转而使用 OdbcConnection、OdbcCommand 和 OdbcDatareader 类的方法和属性来实现我想要的效果。如果您感兴趣的话,这是代码:http://i.imgur.com/fmDymyu.png

关于.net - 为什么此查询返回的记录集的状态为 "closed"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33003667/

相关文章:

c# - 空异常检查字符串是否为空时出错?

c# - 如何在 ASP .NET MVC 中将对象列表与用户(帐户)相关联

delphi - TADOQuery 是否有包含客户端索引的扩展

sql-server - ADO 不传递第一个参数值

c# - 在不知道 typeof T 的情况下获取 Task<T> 的结果

c# - 俄罗斯方 block 游戏的记分牌 .txt 记分牌

mysql - 如何将一列数据显示为固定值,而另一列正常显示,两列来自同一列数据?数据库

sql - 如何向具有大量行的现有数据库表添加标识列

SQL如何按特殊条件进行分组

mysql - Delphi - 将 DateTime Null 保存到 DB (ADO/MySQL)