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 :

SQLCommand pas de résultat


Sujet :

VB.NET

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 9
    Par défaut SQLCommand pas de résultat
    Bonjour,
    Je réalise une requête en sélection et je n'obtiens pas toujours de résultat.
    La table enregistre des données toutes les fractions de secondes.

    Je souhaite rapatrier ces données dans un dataset.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    MyCommande = New SQLCommand("Select ...", MyConnection)
     
    Synclock MyCommand
       MyDSAdapter = New SqlAdapter(MyCommand)
       MyDSAdapter.Fill(MyDS, "MaTable")
       MyDSAdapter = Nothing
       MyCommand = Nothing
    End Synclock
     
    Thread.Sleep(300)
    La même requête ne fonctionne pas à chaque exécution. Je ne remplie pas toujours le dataset. Pourquoi ?

    Merci d'avance

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 154
    Par défaut
    A mon avis le pb vient du SyncLock car tu utilises ta commande comme LockObjet.

    Tu devrais utiliser une classe de connection de type singleton avec le lockobject déclarer en Private dans ta classe.

    De plus tu fais un lockobjet = Nothing dans le bloc SynckLock....
    Ca il ne doit pas bcp aprécier.

    Bref essaie de changer de lockobject.

  3. #3
    Membre averti Avatar de eikeshi
    Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    73
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 73
    Par défaut
    Citation Envoyé par benefit Voir le message
    Bonjour,
    Je réalise une requête en sélection et je n'obtiens pas toujours de résultat.
    La table enregistre des données toutes les fractions de secondes.

    Je souhaite rapatrier ces données dans un dataset.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    MyCommande = New SQLCommand("Select ...", MyConnection)
     
    Synclock MyCommand
       MyDSAdapter = New SqlAdapter(MyCommand)
       MyDSAdapter.Fill(MyDS, "MaTable")
       MyDSAdapter = Nothing
       MyCommand = Nothing
    End Synclock
     
    Thread.Sleep(300)
    La même requête ne fonctionne pas à chaque exécution. Je ne remplie pas toujours le dataset. Pourquoi ?

    Merci d'avance

    Essayes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MyDSAdapter = New SqlDataAdapter(MyCommand)

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 154
    Par défaut
    Si tu regardes MSDN sur SynckLock tu vas tomber sur ça :

    Règles
    Branchement. Vous ne pouvez pas vous brancher dans un bloc SyncLock de l'extérieur du bloc.

    Valeur de l'objet lock. La valeur de lockobject ne peut pas être Nothing. Vous devez créer l'objet lock avant de l'utiliser dans une instruction SyncLock.

    Vous ne pouvez pas modifier la valeur de lockobject en exécutant un bloc SyncLock. Le mécanisme exige que l'objet lock reste inchangé.


    Le coup du Nothing, il ne doit vraiment pas aprécier.

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 9
    Par défaut
    Après toute une série de tests, j'ai trouvé l'origine du problème.
    En effet, je me suis rendu compte qu'aucun article ne traite de ce cas.

    j'ai une table verrouillée par des insertions. La requête par un SELECT est obligé d'attendre son tour.

    Voici la solution :

    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
    17
     
    While Not MyDS.Tables.Contains("MaTable")
       MyCommand = New SqlCommand("SELECT ...", MyConnection)
       MyDSAdapter.Fill(MyDS, "MaTable")
       MyDSAdapter.Dispose()
       MyDSAdapter = Nothing
       MyCommand.Dispose()
       MyCommad = Nothing
     
       If MyDS.Tables.Contains("MaTable") Then
          If MyDS.Tables("MaTable").Rows.Count = 0 Then
             MyDS.Tables("MaTable").Clear()
          End If
       End If
     
      Thead.Sleep(1)
    End While
    Il est nécessaire de vérifier avant ce bout de code s'il pourrait avoir des résultats.

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 9
    Par défaut
    Exemple d'un compteur :

    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
    17
     
    Compteur = Nothing
     
    While Compteur = Nothing
       MyCommand = New SqlCommand("SELECT COUNT(*) AS COMPT ...", MyConnection)
       MyReader = MyCommand.ExecuteReader
     
       While MyReader.Read
          Compteur = MyReader.GetInt32(MyReader.GetOrdinal("COMPT"))
       End While
     
       MyReader.Close()
       MyReader = Nothing
       MyCommand.Dispose()
       MyCommand = Nothing
       Thread.Sleep(1)
    End While

Discussions similaires

  1. Requete qui ne renvoie pas de résultat
    Par bruno782 dans le forum Requêtes
    Réponses: 6
    Dernier message: 01/08/2019, 13h39
  2. [Oracle] oci_num_rows ne retourne pas de résultat (0)
    Par osmoze dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 19/04/2006, 17h13
  3. Réponses: 2
    Dernier message: 14/10/2005, 12h14
  4. Retourner un count = 0 quand pas de résultat
    Par franculo_caoulene dans le forum MS SQL Server
    Réponses: 13
    Dernier message: 21/12/2004, 15h11
  5. [VB.NET] DataSet qui ne retourne pas de résultat
    Par Lois dans le forum Windows Forms
    Réponses: 4
    Dernier message: 02/06/2004, 17h07

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