打开到多个数据库的连接-正在唤醒

问题描述 投票:0回答:1

我有大量的Azure数据库,目前有6个,但是随着时间的推移会增加。

很少访问数据库,为节省成本,将它们设置为1小时后自动休眠。

我需要在Access中连接到这些数据库中的一个或多个数据库来检索数据,因此需要唤醒正确的数据库,每个数据库大约需要30-60秒。

我正在尝试使用AttachDSNLessTable将它们动态添加为链接表,但是在我调用它之前,我需要唤醒数据库。我想异步执行此操作,因为唤醒过程可能需要一些时间,随着数据库数量的增加,这将变得很荒谬。

我的想法是创建一个ADODB连接数组,遍历该数组并使用.Open选项调用adAsyncConnect方法,然后监视所有连接的连接状态,直到所有连接都以Open出现或有错误。

我一直在尝试的代码如下:

Dim databases() As DatabaseInfo
Dim connections() As ADODB.Command
Dim drv As String
Dim i As Integer

databases = getDatabaseInfo()
drv = GetDriverName()

ReDim connections(UBound(databases))

For i = 0 To UBound(databases)

    Dim c As ADODB.Command
    Dim con As ADODB.Connection
    Dim sConn As String

    sConn = "ODBC;DRIVER=" & drv & ";SERVER=" & databases(i).Server & ";DATABASE=" & databases(i).Name & ";UID=" & databases(i).Username & ";PWD=" & databases(i).Password
    connections(i) = New ADODB.Connection 'Receive error 
    connections(i).Open sConn, , , adAsyncConnect

Next i

我在connections(i) = New ADODB.Connection行上遇到编译错误,错误是Invalid use of property

这是否意味着无法在数组中使用ADODB连接?如果没有,还有其他方法可以异步连接到数据库列表吗?

sql-server vba azure adodb
1个回答
0
投票

这是问题代码:

Dim connections() As ADODB.Command

变量名和用法表示您的意图是一个连接数组,因此应该是:

Dim connections() As ADODB.Connection

这将避免由于尝试将连接实例分配给命令变量而导致的编译错误。

© www.soinside.com 2019 - 2024. All rights reserved.