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

Accès aux données Discussion :

Select sur une table qui existe dans 2 BDD


Sujet :

Accès aux données

  1. #1
    Membre du Club
    Inscrit en
    Août 2009
    Messages
    273
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 273
    Points : 46
    Points
    46
    Par défaut Select sur une table qui existe dans 2 BDD
    Bonjour,

    Je cherche à lister tous les utilisateurs de la table users qui se trouve dans 2 bases de données différentes sur Sql Server.

    Mais je ne sais pas comment m'y prendre?

    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
      private static SqlConnection conn = new SqlConnection("Data Source=..\\..; " +
                "Initial Catalog=..;Integrated Security=True");
     
    private static SqlConnection conn2 = new SqlConnection("Data Source=..\\..; " +
                "Initial Catalog=..;Integrated Security=True");
     
            #endregion
     
            #region Methods
     
            #region FetchAllUsers Method
            public static List<UserBO> FetchAllUsers ()
            {
                List<UserBO> lstUsers = new List<UserBO>();
     
                try
                {
                    conn.Open();
                    SqlCommand cmd = new SqlCommand("SELECT DISTINCT FIRSTNAME, LASTNAME FROM USERS", conn);
     
                    SqlDataReader reader = cmd.ExecuteReader();
     
                    while (reader.Read())
                    {
                        lstUsers .Add(
                              new UserBO()
                              {
                                  Nom= reader ["FIRSTNAME"].ToString(),
                                  Prenom= reader ["LASTNAME"].ToString()
                              }
                          );
     
                    }
                    reader.Close();
                    conn.Close();
     
                    return lstUsers ;
                }
                catch (Exception e)
                {
                    throw e;
                }
            }
            #endregion
    Merci,

  2. #2
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    436
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hauts de Seine (Île de France)

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 436
    Points : 963
    Points
    963
    Par défaut
    Est-ce que ton premier bloc récupère bien la liste des utilisateurs de ta première base ? Si oui tu peux faire comme cela je pense :

    Code C# : 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
    public static List<UserBO> FetchAllUsersFromDB (SqlConnection connexion)
    {
    // ouverture de la connexion
    // execution requête
    // récupération résultat
    // return resultat
    }
     
    public static List<UserBO> FetchAllUsers ()
    {
     List<UserBO> lstUsers = new List<UserBO>();
     
    SqlConnection conn = new SqlConnection(.....); 
    SqlConnection conn2 = new SqlConnection(.....);
     
    try 
    {
    lstUsers.AddRange(FetchAllUsersFromDB (conn));
    lstUsers.AddRange(FetchAllUsersFromDB (conn2));
    }
    catch (exception e)
    {
    //log erreur traitement erreur etc
    }
     
    return lstUsers
    }
    "S'adapter, c'est vaincre" - Cellendhyll de Cortavar

  3. #3
    Membre du Club
    Inscrit en
    Août 2009
    Messages
    273
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 273
    Points : 46
    Points
    46
    Par défaut
    Oui, merci.

    Et si je veux faire une seule requête Select sur 2 tables différentes qui se trouvent sur 2 serveurs différents.

  4. #4
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Tu peux passer par un LinkedServer, mais ça peut générer des lenteurs...
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  5. #5
    Membre du Club
    Inscrit en
    Août 2009
    Messages
    273
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 273
    Points : 46
    Points
    46
    Par défaut
    Et comme ceci?

    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
    55
    56
    57
    58
    59
    60
    61
    62
    63
      private static SqlConnection conn1 = new SqlConnection("Data Source=..\\..; " +
                "Initial Catalog=..;Integrated Security=True");
     
    private static SqlConnection conn2 = new SqlConnection("Data Source=..\\..; " +
                "Initial Catalog=..;Integrated Security=True");
     
            #endregion
     
            #region Methods
     
            #region FetchAllUsers Method
            public static List<UserBO> FetchAllUsers ()
            {
                List<UserBO> lstUsers = new List<UserBO>();
     
                try
                {
                    conn1.Open();
                    conn2.Open();
                    SqlCommand cmd1 = new SqlCommand("SELECT DISTINCT FIRSTNAME, LASTNAME FROM USERS", conn1);
                    SqlCommand cmd2 = new SqlCommand("SELECT DISTINCT FIRSTNAME, LASTNAME FROM USERS", conn2);
     
                    SqlDataReader reader1 = cmd1.ExecuteReader();
                    SqlDataReader reader2 = cmd2.ExecuteReader();
     
                    while (reader1.Read())
                    {
                        lstUsers .Add(
                              new UserBO()
                              {
                                  Nom= reader1 ["FIRSTNAME"].ToString(),
                                  Prenom= reader1 ["LASTNAME"].ToString()
                              }
                          );
     
                    }
     
                    while (reader2.Read())
                    {
                        lstUsers .Add(
                              new UserBO()
                              {
                                  Nom= reader2 ["FIRSTNAME"].ToString(),
                                  Prenom= reader2 ["LASTNAME"].ToString()
                              }
                          );
     
                    }
     
                    reader1.Close();
                    conn1.Close();
     
                    reader2.Close();
                    conn2.Close();
     
                    return lstUsers ;
                }
                catch (Exception e)
                {
                    throw e;
                }
            }
            #endregion

  6. #6
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Ben ça dépend :
    - Soit tu lances deux requêtes (une vers chacun des serveurs) depuis ton application, et tu fusionnes les résultats en LinQ une fois le résultat des deux requêtes récupéré.
    - Soit tu crées un Linked Server et tu fusionnes tes résultats via une jointure dans SQL Server, et au niveau de ton application tu n'auras qu'à gérer une seule requête.

    Donc à toi de voir si tu préfères déporter cette opération sur le serveur de bases de données ou non.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  7. #7
    Membre du Club
    Inscrit en
    Août 2009
    Messages
    273
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 273
    Points : 46
    Points
    46
    Par défaut
    Possible d'avoir un exemple?

  8. #8
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Pour le cas où tu lances deux requêtes depuis ton application, tu as donné l'exemple toi-même.

    Pour le second cas où on délègue ça à SQL Server voici les étapes :
    1. Créer un LinkedServer à l'aide de sp_addlinkedserver. Exemple à lancer sur l'instance SRVR001\ACCTG pour pouvoir récupérer des données de l'instance SRVR002\ACCTG :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    USE [master]
    GO
    -- Ajoute le LinkedServer
    EXEC master.dbo.sp_addlinkedserver 
        @server = N'SRVR002\ACCTG', 
        @srvproduct=N'SQL Server' ;
    GO
    -- Ajoute le login
    EXEC master.dbo.sp_addlinkedsrvlogin 
        @rmtsrvname = N'SRVR002\ACCTG', 
        @locallogin = NULL , 
        @useself = N'True' ;
    GO
    2. Exécuter une requête depuis SRVR001\ACCTG qui utilise le LinkedServer :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    -- Là on tape sur SRVR001\ACCTG
    SELECT DISTINCT 
              FirstName
            , LastName
    FROM Users
     
    UNION ALL
     
    -- Là on utilise le LinkedServer donc on tape sur SRVR002\ACCTG
    SELECT DISTINCT
              FirstName
            , LastName
    FROM [SRVR002\ACCTG].DatabaseName.SchemaName.Users
    Pas testé, mais tu as le principe
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

Discussions similaires

  1. [SQL] Select sur 2 tables qui crée une colonne vide
    Par logiclogic dans le forum SAS Base
    Réponses: 10
    Dernier message: 10/05/2013, 19h32
  2. ora-00942 lors d'un truncate sur une table qui existe
    Par olivier] dans le forum Oracle
    Réponses: 2
    Dernier message: 17/11/2011, 17h08
  3. Réponses: 6
    Dernier message: 08/02/2007, 14h41
  4. selection sur une table en fonction de plusieurs ligne
    Par dimdidi dans le forum Langage SQL
    Réponses: 2
    Dernier message: 06/12/2004, 08h42
  5. Une table qui existe mais qui est inconnu! ?
    Par Nino dans le forum InterBase
    Réponses: 6
    Dernier message: 13/06/2003, 11h47

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