【问题标题】:Multiple-step OLEDB operation generated errors多步 OLEDB 操作产生错误
【发布时间】:2017-01-18 21:14:37
【问题描述】:

我需要获取数据库中的所有表名。 我一直以错误结束

对象关闭时不允许操作

我四处搜索,发现很多人说他们应该添加SET NOCOUNT ONSet objRecords = objRecords.NextRecordset(),这会导致错误:

多步 ole db 操作产生错误。检查每个 OLE DB 状态值(如果可用)。没有工作完成

这就是我在这些错误之间切换的地方。

我正在尝试做的查询

SET NOCOUNT ON Use {Database} SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_CATALOG='{Database}'

我的连接字符串"Provider=SQLOLEDB; Data Source={Server}; Initial Catalog={Database}; User ID={Login}; Password={Password};"

我的 SQL 服务器在 Windows Server 2012 上。

我得到错误的函数:

Function LoadTableData()
  Dim objSqlConnection : Set objSqlConnection = CreateObject("ADODB.Connection")
  Dim objRecords : Set objRecords = CreateObject("ADODB.RecordSet")

  objSqlConnection.Open ReplaceInfo()
  Dim ReplacedText : ReplacedText = Replace(SelectAllDatabaseTables, "{Database}", SelectedDatabase)

  objRecords.Open ReplacedText, objSqlConnection, 3, 3

  Set objRecords = objRecords.NextRecordset()
  Do While Not objRecords.EOF
    alert("Test")
    objRecords.MoveNext()
  Loop
End Function

就我所见,应该没有问题,但我认为这与查询有关,因为我可以毫无问题地执行 SELECT * FROM {Database}

【问题讨论】:

  • 尝试注释掉这一行:Set objRecords = objRecords.NextRecordset()。我相信这是您的operation is not allowed when the object is closed 错误的来源。
  • 刚刚评论它并获得operation is not allowed when the object is closed
  • 当您在查询中使用 SET NOCOUNT ON 时,这意味着您只获得一个记录集并且 Set objRecords = objRecords.NextRecordset() 关闭当前 RS - oblect 已关闭
  • “多步操作”是由于查询。在USE database-name 和其他语句之间需要GO,或者以; 结束每个单独的语句。

标签: sql-server database vbscript


【解决方案1】:

我不完全确定这是如何解决的,但我将 USE {DATABASE} 移出查询并在连接上执行它,而不是解决了我的问题

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-17
    相关资源
    最近更新 更多