Erreur VB6 lors de l'appel de SQL Server SP: "opération n'est pas autorisée lorsque l'object est fermé"

J'ai une ancienne application VB6 qui était connectée à la database de production sybase. La database a récemment été migrée vers SQL Server 2008 R2 et maintenant, je suis en train de mettre à jour l'application pour qu'elle rest opérationnelle. L'erreur que j'obtiens est " L'opération n'est pas autorisée lorsque l'object est fermé ".

C'est la structure du code sur VB6:

Dim sql as Ssortingng Dim connSsortingng as Ssortingng Dim conn as New ADODB.Connection connSsortingng = "Provider=SQLNCLI10.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=CatalogName;Data Source=Production_Server_Name;" sql = "EXEC sp_name @param1, @param2, @param3, @param4" conn.Open connSsortingng Dim Cmd as ADODB.Command Set Cmd = New ADODB.Command Set Cmd.ActiveConnection = conn Cmd.CommandText = sql Cmd.CommandType = adCmdText Cmd.CommandTimeOut = 300 Dim rs as ADODB.Recordset Set rs = New ADODB.Recordset rs.Open sql, conn --> The Code fails on this line !!! Set rs = Cmd.Execute() If rs Is Nothing Or IsNull(rs) Then Set rs = Nothing bla bla bla bla bla End 

Le code de procédure stockée est le suivant:

 CREATE PROCEDURE sp_name ( @param1 as integer, @param2 as integer, @param3 as integer, @param4 as nvarchar(150) ) AS SET NOCOUNT ON -- All the code goes here RETURN 

Notes de structure de code :

  • @ param1, @ param2 et @ param1 sont des valeurs définies par un entier. @ param4 est une valeur de string séparée par des virgules
  • Je sais déjà que les objects ADODB peuvent être déclarés et instanciés sur la même ligne.

Validations que j'ai déjà faites / Suggestions déjà essayées sans succès :

  • Le SP fonctionne parfaitement lorsqu'il est exécuté à partir de SSMS avec un user de database en lecture seule.
  • Le SP utilise des tables variables (@VariableTables) pour les traitements intermédiaires.
  • Le code VB6 fonctionne lorsque vous appelez le SP SQL Server SP "sp_who"
  • Le code VB6 WORKS lorsque la variable sql contient "SELECT TOP 1 Column FROM DB.dbo.Table"
  • Le SP échoue même lors de l'utilisation de la qualification complète pour l'appel (EXEC DB.dbo.sp_name)
  • Le SP FAILS même en supprimant la partie "EXEC" de la variable sql

Tout mot pour mettre en lumière cette erreur de sujet soit vraiment apprécié et la bonne réponse acceptée immédiatement.

Merci d'avance

Vous devez d'abord ouvrir la connection.

 Dim rs as ADODB.Recordset Set rs = New ADODB.Recordset conn.Open() <-- missing this rs.Open sql, conn Set rs = Cmd.Execute()