Visual Basic, VB .NET, ASP, Active X, Access, SQL Server

ADO: desconectando um Recordset gerado por um objeto Command

Sempre que você cria uma aplicação n-camadas ou distribuída, torna-se muito importante que seu código consuma o mínimo de recursos do servidor. Para tanto, manter uma conexão ao servidor de banco de dados pode gerar sérios gargalos. Criar um Recordset desconectado de um Recordset padrão é simples. Contudo, você pode não saber como desconectar um Recordset que foi gerado de um objeto Command.

Para fazer isto, você cria o objeto Command e configura suas propriedades do modo como normalmente faria, contudo, ao invés de chamar o método Execute, você passa o objeto Command para o método Open do Recordset no argumento Source. Então, você desconecta o Recordset normalmente e destrói o objeto Command. O código a seguir demonstra isto. 

    Dim cmd As ADODB.Command
    Dim rst As ADODB.Recordset
    Dim param As ADODB.Parameter

    Set cmd = CreateObject("ADODB.Command")
    With cmd
        .CommandText = "sp_myStoredProc"
        .CommandType = adCmdStoredProc
        .ActiveConnection = STR_CONN 'uma string de conexão
        Set param = .CreateParameter("Param1", _
        adVarChar, adParamInput, 2, "foo")
        .Parameters.Append param
    End With
    Set rst = CreateObject("ADODB.Recordset")
    With rst
        .CursorLocation = adUseClient
        .Open cmd, CursorType:=adOpenStatic, _
                Options:=adCmdStoredProc
        Set .ActiveConnection = Nothing
    End With
    Set DataGrid1.DataSource = rst
    Set cmd = Nothing
End Sub