【问题标题】:Multiple ADODB.Connection in vbScriptvbScript 中的多个 ADODB.Connection
【发布时间】:2014-03-24 10:26:17
【问题描述】:

我有一组数据库服务器,并希望在循环中对所有服务器执行相同的查询。
但在第一次迭代后,我得到以下错误:
- 错误号:3704
- 描述:Operation is not allowed when the object is closed

我实现的代码是:

暗淡的用户名 暗暗密码 暗淡的服务器列表(4) serverList(0) = "服务器地址0" serverList(1) = "服务器地址 1" serverList(2) = "服务器地址2" serverList(3) = "服务器地址 3" '用户名和密码设置正确 对于 counter = 0 到 UBound(serverList)-1 设置 connObj = CreateObject("ADODB.Connection") 设置 rsObj = CreateObject("ADODB.Recordset") 连接字符串 = .......... connObj.Open connString,用户名,密码 '错误来了,在第二次迭代中。 sqlScript = "SELECT * FROM ......" rsObj.open sqlScript, connObj 不在时做 rsObj.EOF '记录集​​已获取..... rsObj.MoveNext 环形 '当前连接已关闭 rsObj.close connObj.close 下一个

注意:对于第一次迭代,此代码运行良好。第二次迭代出现错误。

【问题讨论】:

    标签: vbscript connection ado


    【解决方案1】:

    (0) 禁用“On Error Resume Next”(如果你使用的话)

    (1)由于UBound()返回最后一个索引,而不是大小,改变

    for counter = 0 to UBound(serverList)-1
    

    到

    for counter = 0 to UBound(serverList)
    

    (2) 有可能是你弄乱了连接字符串,发布真实代码

    connString = ..........
    

    (3) 由于 VBScript 有 Until 变化

    Do While Not rsObj.EOF
    

    到

    Do Until rsObj.EOF
    

    (4) 由于您的记录集被命名为rsObj 更改

    rsNice.MoveNext
    

    到

    rsObj.MoveNext
    

    如果你确实正确地构造了连接字符串,(4) 是错误的原因。

    【讨论】:

    • (2) 不是问题,因为我在第一次迭代中得到了正确的结果。 (1) 也不是问题,因为至少它必须迭代 3 台服务器,因为第 (4) 点是一个错字。
    【解决方案2】:

    我刚刚找到了这个问题的解决方案:
    在遍历服务器时,我还尝试关闭每个连接的连接对象。

       ......
       rsObj.close
       connObj.close
    
    Next 'end of iteration over servers.
    

    现在我将关闭语句移出循环。 即在迭代时让对象打开。

       ......
    Next 'end of iteration over servers.
    
    rsObj.close
    connObj.close
    

    所以,这一切都与连接的打开/关闭状态有关。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-18
      • 2014-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多