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écupérer data de multiples requêtes en une fois


Sujet :

VB.NET

  1. #1
    Membre éprouvé
    Homme Profil pro
    Programmeur analyste
    Inscrit en
    Février 2009
    Messages
    546
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Canada

    Informations professionnelles :
    Activité : Programmeur analyste
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2009
    Messages : 546
    Points : 1 116
    Points
    1 116
    Par défaut Récupérer data de multiples requêtes en une fois
    Bonjour,

    Sur SQL server 2008 on peut lancer plusieurs requêtes en une fois.

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select colonne from table_1 where colonne = 'Salut';
    select colonne_2 from table_2 where colonne_2 = 'Bonjour'

    comment récupérer les résultat des 2 requêtes


    Code VB.NET : 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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
     
            Dim dt As DataTable
            Dim cn As New SqlConnection
            Dim ds As New DataSet
            Dim connectionstring As String
            Dim sql As String
     
            sql = "select colonne from table_1 where colonne = 'Salut'" & _
                " select colonne from table_2 where colonne_2 = 'Bonjour'"
     
            connectionstring = "Persist Security Info=True;User ID=xx;Initial Catalog=xxx;Data Source=xxx;Packet Size=4096;Password=xxx"
     
            cn = New SqlConnection(connectionstring)
     
            cn.Open()
     
            ds.Clear() 'efface le precedent dataset
     
            Dim da As New SqlDataAdapter(sql, cn)
     
            da.Fill(ds, "Verif_OBS")
     
            cn.Close()
     
            For i = 0 To ds.Tables(0).Rows.Count - 1
     
                dt = ds.Tables("Verif_OBS")
     
                Dim row As DataRow
     
                row = dt.Rows(i)
     
                Dim RESULT As String
                RESULT = row("colonne") 'Pour la premiere
                MsgBox(RESULT)
     
                 '??????????????????????????
                 'pour la 2e
            Next
     
     
            da = Nothing
            ds = Nothing
     
        End Sub

    Merci!

  2. #2
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    sql = "select colonne from table_1 where colonne = 'Salut' "
    sql +="union all "
    Sql+= " (select colonne from table_2 where colonne_2 = 'Bonjour')"

  3. #3
    Membre éprouvé
    Homme Profil pro
    Programmeur analyste
    Inscrit en
    Février 2009
    Messages
    546
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Canada

    Informations professionnelles :
    Activité : Programmeur analyste
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2009
    Messages : 546
    Points : 1 116
    Points
    1 116
    Par défaut
    Citation Envoyé par rdurupt Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    sql = "select colonne from table_1 where colonne = 'Salut' "
    sql +="union all "
    Sql+= " (select colonne from table_2 where colonne_2 = 'Bonjour')"
    Merci d'avoir répondu.
    Je ne veux pas faire de union all
    car les requêtes qu'il me faut n'ont pas le même nombre de colonne et provienne de table différente
    et puis on ne peut pas faire de order by pour chaque requête avec union all.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    sql = "select colonne,'' as colonn2 from table_1 where colonne = 'Salut' "
    sql +="union all " 
    Sql+= " (select colonne ,colonne2 from table_2 where colonne_2 = 'Bonjour' order by colonne2)"
    Où vois tu que ces deux requêtes non pas le même nombre de champs?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    sql ="select frm.colonne,frm.colonne2 from "
    sql += "(select colonne,'' as colonne2,1 as ordre from table_1 where colonne = 'Salut' "
    sql +="union all " 
    Sql+= " (select colonne ,colonne2,2 as ordre from table_2 where colonne_2 = 'Bonjour' ) ) as frm "
    Sql +="order by ordre,colonne"
    Dernière modification par Invité ; 18/02/2015 à 23h38.

  5. #5
    Membre éprouvé
    Homme Profil pro
    Programmeur analyste
    Inscrit en
    Février 2009
    Messages
    546
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Canada

    Informations professionnelles :
    Activité : Programmeur analyste
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2009
    Messages : 546
    Points : 1 116
    Points
    1 116
    Par défaut
    ces requête étaient seulement un exemple.

    Mes requêtes sont des requête récursive et sont très longue.
    J'en ai une quinzaine à lancer pour avoir tout les résultats que je recherche.
    Chacune de ces requêtes n'ont pas le même nombre de colonne, certaine en on 20 d'autre seulement 4

    sur certaine je veux un order by Col_1,Col_2,Col_3,Col_4 et sur d'autre je veux un order by Col_3,Col_1,Col_4,Col_2 ..... et j'en passe
    Je veux un order by spécifique pour chaque requête.
    Avec une colonne ordre, comme vous l'avez suggéré, cela fonctionne seulement pour séparer les multiples requêtes mais ne seront pas dans l'ordre voulu
    sauf la première.

    Je veux toute les lancer en une fois car,
    Notre entreprise est situé au Canada (maison mère),
    et nous avons 2 autres usines au État-Unis.
    Le server est situé au Canada pour les 3 usines.

    A chaque fois qu'on lance une requête à partir des État-Unis sur le server du Canada,
    ça prend environ 4 secondes aller et retour par requête.

    Alors c' est inacceptable de lancer une requête par une. C'est trop long.

    C'est pour cela que je cherche un moyen de récupérer tout les résultats de tout les requêtes lancer en une fois.

    Si on lance plusieurs requêtes (sans union all) en une seul fois sur Microsoft sql server management studio,
    on a plusieurs résultats séparer.

    Donc est-il possible de récupérer les résultats de plusieurs requêtes (sans union all) lancer en une seul fois avec vb net ?

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    ce qui prouve c'une question bien formulée n'est pas toujours bien comprise!
    Une question bien comprise c’est 100% de la solution (rdurupt) !
    en théorie, tu peux exécuter plusieurs requête dans un même script Sql,et ton script exécutera toutes tes requêtes de sélections, sauf que que ton connecteur ODBC ne te retournera que la dernière!

    si ta Connexion ODBC te l'autorise, je te proposes de créer une table four-tout TempTable avec un nombre de colonnes suffisante pour toutes tes requête, et de convertir tes requête de sélection en requête d'insertion. il ne te restera qu'a récupérer le contenue de la table via un select en fin de script. en suite après récupération des datas, tu drop la table.

  7. #7
    Membre émérite Avatar de mactwist69
    Homme Profil pro
    Développement VB.NET
    Inscrit en
    Janvier 2007
    Messages
    1 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement VB.NET
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Points : 2 528
    Points
    2 528
    Par défaut
    Hello,

    Ce qu'il prends du temps, ce n'est surement pas tellement la distance... Sinon à chaque fois que je vais sur un site américain, ça mettrai 4 secondes...

    Surement que les requêtes sont lourdes...

    Alors je vois plusieurs solutions :

    - Plutôt que d’exécuter la requête à distance, faire appel à une vue, c'est donc le serveur qui travaillera.
    - Tu peux aussi imaginer faire une procédure stocker sur le serveur, qui actualisera une table souvent... Tu n'auras plus qu'à récupérer le contenu.
    (Et dans cette deuxième solution, tu pourrais aussi faire l'export des données de manières automatique, xml, replication...)
    L'avenir appartient à ceux... dont les ouvriers se lèvent tôt. (Coluche)

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    sur le datareader on peut faire .nextresult pour passer à la requete suivante, avec un dataset je ne sais pas s'il y a une possibilité

    (@rdurupt donc non ca ne retourne pas la dernière mais plutot la première)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  9. #9
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Pol63 Voir le message
    sur le datareader on peut faire .nextresult pour passer à la requete suivante, avec un dataset je ne sais pas s'il y a une possibilité

    (@rdurupt donc non ca ne retourne pas la dernière mais plutot la première)
    merci pour la précision.

  10. #10
    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 239
    Points
    4 239
    Par défaut
    Citation Envoyé par Pol63 Voir le message
    sur le datareader on peut faire .nextresult pour passer à la requete suivante, avec un dataset je ne sais pas s'il y a une possibilité

    (@rdurupt donc non ca ne retourne pas la dernière mais plutot la première)
    Avec ceci, on peut créer directement plusieurs tables dans le dataset (ce n'est pas du VB mais c'est traduisible facilement)
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SqlDataAdapter adapter = new SqlDataAdapter(
          "SELECT * FROM Customers; SELECT * FROM Orders", connection);
    adapter.TableMappings.Add("Table", "Customer");
    adapter.TableMappings.Add("Table1", "Order");
    
    adapter.Fill(ds);

    Et ici, si on veut passer par un datareader.
    Kropernic

  11. #11
    Membre éprouvé
    Homme Profil pro
    Programmeur analyste
    Inscrit en
    Février 2009
    Messages
    546
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Canada

    Informations professionnelles :
    Activité : Programmeur analyste
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2009
    Messages : 546
    Points : 1 116
    Points
    1 116
    Par défaut Résolu
    Merci à tous de vous avoir penché sur mon problème.

    J'ai opté pour la solution à Kropernic, cela était plus facile pour moi

    Donc voici le code en vb net pour récupérer tout les résultat des multiple requêtes lancer en une seul fois sans union all

    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
       Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
     
            Dim dt As DataTable
            Dim cn As New SqlConnection
            Dim ds As New DataSet
            Dim connectionstring As String
            Dim sql As String
     
     
            sql = "select colonne from table_1 where colonne = 'Salut'" & _
                " select colonne from table_2 where colonne_2 = 'Bonjour'"
     
            connectionstring = "Persist Security Info=True;User ID=xx;Initial Catalog=xx;Data Source=xxxx;Packet Size=4096;Password=xx"
     
            cn = New SqlConnection(connectionstring)
     
            cn.Open()
     
            Dim da As New SqlDataAdapter(sql, cn)
     
            da.TableMappings.Add(0, "SAD_IVPROD")
            da.TableMappings.Add(1, "SAD_IVPROD")
     
            da.Fill(ds)
     
            cn.Close()
     
            For i = 0 To da.TableMappings.Count - 1
     
                Dim RESULT As String
     
                For j = 0 To ds.Tables(0).Rows.Count - 1
     
                    dt = ds.Tables(i)
                    Dim row As DataRow
                    row = dt.Rows(j)
     
     
                    RESULT =RESULT & ", " & row("colonne ") 
     
                Next
     
               if RESULT <> "" then
                     MsgBox(RESULT)
                else
                     MsgBox("Pas de résultat")
               end if
     
            Next
     
            da = Nothing
            ds = Nothing
     
        End Sub
    Le résultat en temps est d'avoir gagné environ 55 secondes avec cette méthode plutôt que d'avoir lancer les requêtes une par une.

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

Discussions similaires

  1. Récupérer un paramètre de requête dans une class Action
    Par cherif ahmed dans le forum Struts 1
    Réponses: 0
    Dernier message: 08/02/2014, 16h57
  2. [AC-2007] Lancer plusieurs requêtes en une fois
    Par theBinette dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 09/11/2009, 15h17
  3. [1.x] Récupérer le résultat de requête suite à une jointure
    Par avalon50 dans le forum Symfony
    Réponses: 3
    Dernier message: 26/10/2009, 13h11
  4. Récupérer le code SQL à partir d'une requête
    Par Edith_T dans le forum Requêtes et SQL.
    Réponses: 9
    Dernier message: 23/11/2004, 14h10

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