【问题标题】:Why does the recordset returned by this query have a status of "closed"?为什么此查询返回的记录集状态为“关闭”?
【发布时间】: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


【解决方案1】:

我在 LabVIEW subreddit 上发布了这个,结果发现数据库连接 VI 对批处理查询不是很好。我转而使用 OdbcConnection、OdbcCommand 和 OdbcDatareader 类的方法和属性来实现我想要的。如果你有兴趣,这里是代码:

【讨论】:

    【解决方案2】:

    首先,我建议您为此编写一个存储过程。其次,您的drivers (ODBC) 是最新的吗?第三,我认为您可以通过在 forums.ni.com 或 lavag.org 上发布您的问题来获得更好的帮助。最后,也许这个topic 有一个可以帮助你的答案。

    【讨论】:

    • 谢谢,我去看看驱动问题。那张海报可能是对的;我的服务器不喜欢多个语句。我尝试在 forums.ni.com 上发布此内容,但没有点击(这很奇怪,考虑到我获得了近 100 次浏览)。我得去看看 lavag,看起来很有希望。
    猜你喜欢
    • 2021-11-03
    • 1970-01-01
    • 1970-01-01
    • 2018-12-08
    • 2016-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-29
    相关资源
    最近更新 更多