【发布时间】:2017-01-18 21:14:37
【问题描述】:
我需要获取数据库中的所有表名。 我一直以错误结束
对象关闭时不允许操作
我四处搜索,发现很多人说他们应该添加SET NOCOUNT ON 或Set 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