Problème sur OleDbCommand
Bonjour,
j'ai un problème avec le composant OleDbCommand.
Voici le code principal :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
|
Dim req As New Requete(ConnectionCible.Commun, "")
Dim req2 As New Requete(ConnectionCible.Commun, "")
Try
requete = "select ..."
d = req.GetValeursAsReader(requete)
While d.Read()
d2 = req2.GetValeursAsReader("select ...")
If (d2.HasRows = False) Then
...
End If
d2.Close()
End While
Catch ex As Exception
Finally
d.Close()
req.Fermer()
req2.Fermer()
End Try |
Avec la fonction appelée :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| Public Function GetValeursAsReader(ByVal req As String) As OleDbDataReader
Dim les_champs As OleDb.OleDbDataReader
Dim cmd As OleDb.OleDbCommand
cmd = New OleDb.OleDbCommand(req, Me._ConnC)
try
les_champs = cmd.ExecuteReader(CommandBehavior.CloseConnection)
catch
end try
Return les_champs
End Function |
Mon problème était le suivant lorsque je passe dans la boucle la première fois, je faisais un d2.close(), or quand je repasse une deuxième fois dans la boucle et bien la connexion se retrouve fermée ; j'avais le message suivant :
Citation:
ExecuteReader nécessite une connexion ouverte et disponible, la connexion est actuellement fermée.
J'ai modifier le code en déplaçant le close du d2 en dehors de la boucle while :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| Dim req As New Requete(ConnectionCible.Commun, "")
Dim req2 As New Requete(ConnectionCible.Commun, "")
Try
requete = "select ..."
d = req.GetValeursAsReader(requete)
While d.Read()
d2 = req2.GetValeursAsReader("select ...")
If (d2.HasRows = False) Then
...
End If
End While
Catch ex As Exception
Finally
d.Close()
If not IsNothing(d2) then
d2.Close()
End If
req.Fermer()
req2.Fermer()
End Try |
Maintenant j'ai le message suivant :
Citation:
la commande n'était pas préparée, impossible d'allouer de la mémoire
Et je soupconne le fait qu'il n'y a pas de libération de mémoire puisqu'on ne fait qu'une seule fois le close du d2. Or dans mon cas il y a un très long traitement (on boucle plus de 64000 fois, et j'ai constaté mon erreur au bout de 6400 bouclage).
Ma question est la suivante, de quelle façon doit-on procéder pour libérer correctement cette mémoire.
Merci d'avance