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 :

Résultat de requête différent dans VS que dans MS (management studio)


Sujet :

VB.NET

  1. #1
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 242
    Points
    4 242
    Par défaut Résultat de requête différent dans VS que dans MS (management studio)
    Bonjour,

    Est-ce que l'un d'entre vous aurait une idée de ce qui pourrait provoquer le genre de comportement décrit dans le titre ?

    Mon code vb et tout ce qu'il y a de plus standard... C'est celui que j'utilise à chaque fois et partout ailleurs dans l'application.

    Pourtant, une requête exécutée dans VS me retourne un résultat étrange et lorsque je la teste dans MS, le résultat est celui escompté.

    Plus de détail sur la requête en question ICI

    Merci d'avance,

    Griftou.

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 793
    Points : 1 327
    Points
    1 327
    Par défaut
    Bonjour,

    commence par mettre un point d'arrêt avant l'éxecution de ton code pour voir la requête générée.

    Au niveau SQL il n'a aucune raison de te renvoyer des résultats différents, il y a forcément une erreur derrière ce problème.

  3. #3
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 242
    Points
    4 242
    Par défaut
    C'est bien sûr la première chose que j'ai faite !

    Je fais un arrêt juste avant l'envoi de la requête vers sql server. Là je la copie et je la colle dans management studio et BIM ! J'ai le bon résultat. Par contre dans VS, ça coince ^^

  4. #4
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2011
    Messages
    453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 453
    Points : 478
    Points
    478
    Par défaut
    Ca doit sûrement venir du traitement post-requête dans ce cas...

  5. #5
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 242
    Points
    4 242
    Par défaut
    Non plus XD.

    La requête dans le cas qui pose problème ne renvoie qu'une seule ligne. C'est le cas dans les 2 environnements (c'est déjà ça ^^).

    Quoi qu'il en soit, mon traitement post-requête est une boucle for each qui parcourt les lignes du dataset.

    En debug en mode pas à pas, je m'arrête à l'entrée de la boucle et je regarde ce qui est contenu dans l'objet row et j'ai bien un numéro de registre national dans username au lieu du username.

    Pour ceux qui ont été voir la requête dans l'autre topic que j'ai linké, ça se comporte un peu comme VS inversait les tables T1 et T2 dans la table-valued function que j'appelle... Or je suis convaincu que ce n'est pas ce qu'il se passe (ce serait complètement dingue!!!!).

    Bref, je tourne en rond ^^

  6. #6
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 242
    Points
    4 242
    Par défaut
    Dans un souci de transparence, voici le code qui exécute la requête qui pose problème.

    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
        Public Function GetUserlistByName(ByVal name As String) As List(Of String())
            Dim usernames As New List(Of String())
            ConnectDB()
            sql = "select firstname, lastname, username from usermanagement.fn_get_userlist_by_name('" & name & "','" & frmStart.current_User1.Store & "') order by lastname"
            'sql = "select firstname, lastname, username from UserManagement.Users where lastname like '%" & name & "%' and shop = '" & frmStart.current_User1.Store & "' order by lastname"
            ds = Cnx.DoSelect(sql)
            If ds.Tables.Count > 0 Then
                For Each row As DataRow In ds.Tables(0).Rows
                    Dim userinfo As String() = {"", ""}
                    userinfo(0) = CStr(row("lastname")) & " " & CStr(row("firstname"))
                    userinfo(1) = CStr(row("username"))
                    usernames.Add(userinfo)
                Next
            End If
            Return usernames
        End Function
    Vraiment rien de fantastique. Juste l'objet cnx qui est une instance d'une dll que j'ai créé pour pouvoir faire mes requêtes sans avoir à gérer les dataadapter, les objets command et autre joyeuseté. C'est quelque chose que je n'aime pas alors j'ai fait une dll une fois pour toute qui gère tout ça de manière transparente.

    La fonction DoSelect retourne un dataset. Aucun traitement particulier n'est fait à l'intérieur de cette fonction. Juste l'envoi de la requête vers le SGDBR et la récupération du résultat dans un dataset.

    J'ai beau chercher après une différence sur la ligne de l'utilisateur qui pose problème mais je n'en vois pas... Jusqu'ici, je n'ai ce problème qu'avec un et un seul utilisateur. Pour tous les autres, la requête retourne le résultat attendu.

    Ca commence à me souler grave...

  7. #7
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 048
    Points : 2 201
    Points
    2 201
    Par défaut
    Disons que tu as une différence entre la requête dans le management studio et un requête passé dans une dll "home made".

    L'erreur doit probablement s'y trouver. Soit la requête est retravaillée avant d'être réellement appellée, soit le résultat est faussé avant de sortir de la dll.

  8. #8
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 242
    Points
    4 242
    Par défaut
    Bon...

    Voilà la fonction DoSelect de la dll :

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
        Public Overloads Function DoSelect(ByVal sql As String) As System.Data.DataSet Implements IData.DoSelect
            'effectue un select avec une requête directement construite
            Try
                If Not da Is Nothing Then
                    da.Dispose()
                End If
                da = New SqlClient.SqlDataAdapter
     
                If Not cmd Is Nothing Then
                    cmd.Dispose()
                End If
                cmd = New SqlClient.SqlCommand
                cmd.CommandTimeout = 3600
                cmd.Connection = conn
                cmd.CommandText = sql
     
                da.SelectCommand = cmd
     
                ds = New DataSet
                ds.Reset()
                da.Fill(ds)
                Return ds
            Catch ex As Exception
                MsgBox(ex.Message, MsgBoxStyle.OkOnly, "Erreur.")
                MsgBox(sql)
                Return Nothing
            End Try
        End Function
    Je ne fais aucune modification d'aucune sorte sur la variable nommée "sql".

    Une fois le dataset récupéré, je ne fais que parcourir les lignes et les champs pour les stocker dans un tableau de string. Aucune modification non plus.

    Pour les éventuelles différences dans la requête :
    En débug, je mets un breakpoint sur la ligne en gras dans le code ci-dessous (qui est le même que celui posté précédemment):
    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
        Public Function GetUserlistByName(ByVal name As String) As List(Of String())
            Dim usernames As New List(Of String())
            ConnectDB()
            sql = "select firstname, lastname, username from usermanagement.fn_get_userlist_by_name('" & name & "','" & frmStart.current_User1.Store & "') order by lastname"
            'sql = "select firstname, lastname, username from UserManagement.Users where lastname like '%" & name & "%' and shop = '" & frmStart.current_User1.Store & "' order by lastname"
            ds = Cnx.DoSelect(sql)
            If ds.Tables.Count > 0 Then
                For Each row As DataRow In ds.Tables(0).Rows
                    Dim userinfo As String() = {"", ""}
                    userinfo(0) = CStr(row("lastname")) & " " & CStr(row("firstname"))
                    userinfo(1) = CStr(row("username"))
                    usernames.Add(userinfo)
                Next
            End If
            Return usernames
        End Function
    Une fois le code arrêté sur cette ligne, je récupère ce qu'il y a dans la variable sql (en passant la souris dessus, à l'aide d'un watch, peu importe) et je le copie/colle dans management studio pour l'exécuter.

    Le résultat est bien celui attendu dans MS mais pas dans VS.

    Perso, j'ai beau tourné le truc de tous les sens, je ne vois pas ce qui change...

    Il doit forcément y avoir une différence quelque part pourtant !!!!

Discussions similaires

  1. Réponses: 9
    Dernier message: 06/01/2012, 13h44
  2. Réponses: 1
    Dernier message: 10/09/2009, 18h38
  3. Réponses: 1
    Dernier message: 20/08/2009, 22h33
  4. Réponses: 4
    Dernier message: 02/07/2008, 11h32
  5. [MySQL] Résultat de requête différent sur 2 serveurs identiques
    Par schlitters dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 17/12/2005, 00h24

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