Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

operação não permitida quando o objeto é fechado ao executar uma consulta mais avançada


Este é um problema comum causado por contagens de linhas sendo interpretadas como saída de um procedimento armazenado ao usar ADODB com SQL Server.

Para evitar isso, lembre-se de definir
SET NOCOUNT ON;

em seu procedimento armazenado, isso impedirá o ADODB de retornar um conjunto de registros fechado ou se, por qualquer motivo, você não quiser fazer isso (não tenho certeza do porquê, pois você sempre pode usar @@ROWCOUNT para passar a contagem de linhas de volta), você pode usar
'Return the next recordset, which will be the result of the Stored Procedure, not 
'the row count generated when SET NOCOUNT OFF (default).
Set rs = rs.NextRecordset()

que retorna o próximo ADODB.Recordset se o ADODB detectou um sendo retornado pelo procedimento armazenado (pode ser melhor verificar rs.State <> adStateClosed ao lidar com vários objetos ADODB.Recordset).