IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

using Statement pour VB.NET 2003


Sujet :

VB.NET

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2007
    Messages : 82
    Par défaut using Statement pour VB.NET 2003
    Bonjour à tous,

    Dans le cadre d'un projet vb.net avec VS2003, je n'arrive pas à trouver l'équivalent de using Statement, puique c'est disponible que a partir de FW 2.0

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    string jsonText = @"[""Europe"", ""Asia"", ""Australia"", ""Antarctica"",
     ""North America"", ""South America"", ""Africa""]";
     
    using (JsonTextReader reader = new JsonTextReader(new
     StringReader(jsonText)))
    {
        while (reader.Read())
        {
            if (reader.TokenClass == JsonTokenClass.String &&
                reader.Text.StartsWith("A"))
            {
                Console.WriteLine(reader.Text);
            }
        }
    }
    Pouvez vous me dire comment peut on écrire ce bout de code en vb.net FW 1.1 ?
    Merci par avance

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    700
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 700
    Par défaut
    Bonjour
    supprimez using et libérez le reader avec sa méthode close ou et dispose, si elle existe.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2007
    Messages : 82
    Par défaut
    Citation Envoyé par chrismonoye Voir le message
    Bonjour
    supprimez using et libérez le reader avec sa méthode close ou et dispose, si elle existe.
    Merci
    Mais en VB.NET 2003 y a pas encore using, je cherche un équivalent

    une idée ?

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    700
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 700
    Par défaut
    Bonjour
    supprimez using et libérez le reader avec sa méthode close ou et dispose, si elle existe.
    Ca doit donner ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
            Dim reader As New JsonTextReader(New StringReader(jsonText))
            While reader.Read()
              '*** TRAITEMENT
            End While
            reader.Close()

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2007
    Messages : 82
    Par défaut
    Merci chrismonoye

  6. #6
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    non il y a mieux, car si ca plante avant le .close ca ne sera pas closé
    de plus c'est .dispose qui libère la mémoire non managée
    using appelle d'ailleurs .dispose à la sortie du bloc même en cas d'erreur et n'est utilisable qu'avec des classes implémentant IDisposable

    bref ca donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    dim v as variable disposable ' reader, connection, image ...
    try
      ' traitement
    catch ex as excemtion
      ' traitement et/ou log de l'erreur
    finally
    if v isnot nothing then v.dispose
    end try
    le bloc finally est exécuté dans tous les cas, soit à la fin du try, soit à la fin du catch
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  7. #7
    Membre Expert
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    700
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 700
    Par défaut
    Je ne parlais que du "using", et c'est sur qu'il faut traiter les exceptions.
    Autrement, je ne crois pas que ce reader possède une méthode "dispose".
    Sa méthode "close", ferme le flux et libère les ressources.

  8. #8
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    en effet le reader n'est pas disposable

    m'enfin pour être sur de le closer il faut bien le faire dans un finally
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  9. #9
    Membre Expert
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    700
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 700
    Par défaut
    OK

  10. #10
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 103
    Par défaut
    de toute façon comme il a déja été dit,

    le using statement est une construction syntaxique UNIQUEMENT disponible pour des objets Disposable (qui implémente IDisposable)
    alors finalement que toi sois en 1.1 ou 2 ou même 4 ca n'aurais rien changer au schmilblick.

  11. #11
    Membre Expert
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    700
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 700
    Par défaut
    Bonsoir,
    oui d'accord, la bible dit :
    La classe doit implémenter l'interface IDisposable.
    Mais elle dit aussi :
    Votre code requiert parfois une ressource non managée, par exemple un handle de fichier, un wrapper COM ou une connexion SQL. Un bloc Using garantit la suppression d'une ou de plusieurs de ces ressources lorsque votre code a fini de les utiliser.
    De plus ces readers Json ont des .dispose en protected.
    Alors using est il efficace?
    Si vous pouviez m'éclairer, merci.

  12. #12
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 103
    Par défaut
    non le using ne fonctionnera que si et seulement si le reader implémente l'interface IDisposeable.
    le fait qu'il ait une méthode dispose même protégée ne signifie pas qu'il implémente cet interface.

    attention quand même, parfois on a des drôles de surprise avec les blocs using.
    si tu prend par exemple un objet de contexte généré par entity framework, et que tu l'expose publiquement dans ton assembly. si tu fait un autre projet qui se réfère à cet assembly où tu défini cet objet de contexte... logiquement tu pourras l'utiliser.
    effectivement tu le pourras, mais les règles d'utilisations vont alors changer selon 2 cas.
    si tu n'inclue que la référence vers cette assembly sans les dépendances vers entity framework... alors tu pourra instancier l'objet de contexte, et le faire fonctionner, mais tu ne pourra pas appeler sa méthode Dispose() et tu ne pourra pas non plus l'utiliser dans un using.
    si en revanche tu inclue une référence de projet vers System.Data.Entity... oh miracle... ton objet de contexte devient Disposeable et donc peut-être utilisé dans un using...
    tout est question de portée.
    j'ai déjà rencontré un cas similaire également mais je ne sais plus du tout pourquoi, mais en dehors de entity framework.

  13. #13
    Membre Expert
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    700
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 700
    Par défaut
    Bonjour cinemania
    Ma réponse est tardive, mais j’ai passé beaucoup de temps à lire sur l’exemple Entity Framework, nouveau pour moi.
    Aussi beaucoup de lecture sur Using ou Finally.
    Déjà concernant les deux DLL Json que j’ai regardé, leur « reader » implémente bien IDisposable.
    A mon niveau de compréhension, je trouve difficile de savoir ce que fait réellement Using, difficile de le suivre pas à pas.
    Dans le sens de Pol63, j’ai trouvé ce bout de code qui devrait, (je pense) générer une exception si l’objet n’implémentait pas IDisposable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
            Finally
                Dim disposable As IDisposable = CType(reader, IDisposable)
                If disposable IsNot Nothing Then
                    disposable.Dispose()
                End If
            End Try
    Pour conclure j’archive ton exemple, qui pourra me servir, une fois le concept des ObjectContext de ADO.NET Entity Framework, assimilé et mis en application.
    Merci.

  14. #14
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    je confirme que ce code plantera si la variable reader n'implémente pas IDisposable
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 14/01/2009, 11h49
  2. Réponses: 0
    Dernier message: 04/08/2008, 17h31
  3. salut, je cherche des skins pour VB .NET 2003
    Par Root_JDK dans le forum Windows Forms
    Réponses: 5
    Dernier message: 02/07/2007, 18h09
  4. Réponses: 1
    Dernier message: 02/10/2006, 11h36
  5. Driver postgre pour asp.net
    Par vonbier dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 02/10/2003, 14h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo