VB.NET problème function-requete & question

Freedomsoul -  
Freedomsoul Messages postés 538 Statut Membre -
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

  1. yukino-chan Messages postés 12 Statut Membre
     
    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 ^^
    0
  2. Freedomsoul
     
    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
    0
    1. Freedomsoul Messages postés 538 Statut Membre 97
       
      UP
      0