VB.NET problème function-requete & question

Bonsoir,

Voilà, j'ai un problème concernant une fonciton,

 Function requete_BDD(ByVal requete, Optional ByVal type = 0) 

        Dim connexion As New System.Data.OleDb.OleDbConnection() 
        connexion.ConnectionString = "provider = Microsoft.Jet.OleDB.4.0;DATA source = '..\..\..\..\BDD.mdb'" 
            connexion.Open() 

            Dim cmd As New OleDbCommand(requete, connexion) 
            Dim reader As OleDbDataReader = cmd.ExecuteReader 
            Dim resultat 

            reader.Read() 

            If type = 2 Then 
                resultat = reader 'reader contiendra un tableau de valeur, 'lié a la requete sql) 
                Return resultat 
                connexion.Close() 
'Problème.. Il faut fermer la connexion avant le renvoie de la fonction !! 
'Mais ... comme c'est un tableau, si je ferme la connexion, la pointeur vers le tableau est "bloqué.. enfin .. c'est ce que je pense .. et le problème est qu'au bout d'un trop grand nombre de requete de ce genre... la connexion est refusé.. sans doute car il y en a trop.. 
'IL faudrait passer les valeur du tableau dans un nouveau tableau, cependant, je rencontre quelque difficulté avec le for each val in reader, y aurait-il une fonction count ? pour un tableau ? je suis bloqué par ce problème d'accès :s 
'en gros si je mets le connexion.close avant... ça plante. le return ne revois rien ! ><

            End If 
'[...] 


    End Function


PS: j'ai simplifier mon code pour un meilleur lisibilité, cela n'influe rien sur mon problème :)

3 réponses

  • Votes
  • Date
  • Date décroissante
  1. Bonsoir Freedomsoul,

    J'ai essayé de faire des changement sur votre fonction mais en connection avec sqlserver et ça a fonctionné.

    Function requete_BDD(ByVal requete, Optional ByVal type = 0) As Collection
    Dim connexion As New System.Data.OleDb.OleDbConnection()
    connexion.ConnectionString = "provider = Microsoft.Jet.OleDB.4.0;DATA source = '..\..\..\..\BDD.mdb'"
    connexion.Open()

    Dim cmd As New OleDbCommand(requete, connexion)
    Dim reader As OleDbDataReader = cmd.ExecuteReader
    Dim resultat As New Collection

    If type = 2 Then
    While reader.Read()
    resultat.Add(reader(0))
    End While
    reader.Close()
    connexion.Close()
    Return resultat
    End If
    End Function

    j'espère qu'elle marchera pour vous =) bonne soirée ^^
    1. Eh bien ça ne fonctionne pas... mais a quoi correspond le type collection?

      La valeur que je renvoie n'est pas forcément plusieur valeur !
      If type = 2 Then 
                      resultat = reader 'reader contiendra un tableau de valeur, 'lié a la requete sql) 
                      Return resultat 
                      connexion.Close()
      elseif type = 1 then
                      resultat = reader(0) 'lunique valeur est renvoyée
                      connexion.Close()                
      Return resultat
                      
      end if


      selon la requete, on renvoie directement ou pas