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

ADO.NET Discussion :

Remplir une table par les données d'une autre table(distant)


Sujet :

ADO.NET

  1. #1
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    96
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Avril 2008
    Messages : 96
    Points : 44
    Points
    44
    Par défaut Remplir une table par les données d'une autre table(distant)
    Bonjour,

    comment remplir une table locale (sur localhost) par les données d'une autre table sur un autre serveur

    en fait: j'ai 2 base de donnée local et distant
    et je crois pas que la requete
    insert into T select * from V
    fe l'affaire puisque il s'agit pas de la meme connexion

    qlq'un a une solution ?

    MERCI

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Tu charges les données en mémoire dans une DataTable via un SqlDataAdapter, et tu les insères dans l'autre table avec un autre SqlDataAdapter.

    Un truc comme ça :

    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
    var table = new DataTable();
    string sql = "select * from une_table";
    using (var connection = new SqlConnection(sourceConnectionString))
    using (var adapter = new SqlDataAdapter(sql, connection))
    {
        // Très important, pour que les lignes chargées soient considérées comme nouvelles
        adapter.AcceptChangesDuringFill = false;
     
        // Charger les données
        adapter.Fill(table);
    }
     
    using (var connection = new SqlConnection(targetConnectionString))
    using (var adapter = new SqlDataAdapter(sql, connection))
    {
        // Pour générer automatiquement la commande Insert
        var builder = new SqlCommandBuilder(adapter);
     
        // Insérer les données
        adapter.Update(table);
    }
    (code non testé, je garantis pas que ça marche tel quel)

  3. #3
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    96
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Avril 2008
    Messages : 96
    Points : 44
    Points
    44
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Tu charges les données en mémoire dans une DataTable via un SqlDataAdapter, et tu les insères dans l'autre table avec un autre SqlDataAdapter.

    Un truc comme ça :

    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
    var table = new DataTable();
    string sql = "select * from une_table";
    using (var connection = new SqlConnection(sourceConnectionString))
    using (var adapter = new SqlDataAdapter(sql, connection))
    {
        // Très important, pour que les lignes chargées soient considérées comme nouvelles
        adapter.AcceptChangesDuringFill = false;
     
        // Charger les données
        adapter.Fill(table);
    }
     
    using (var connection = new SqlConnection(targetConnectionString))
    using (var adapter = new SqlDataAdapter(sql, connection))
    {
        // Pour générer automatiquement la commande Insert
        var builder = new SqlCommandBuilder(adapter);
     
        // Insérer les données
        adapter.Update(table);
    }
    (code non testé, je garantis pas que ça marche tel quel)
    Merci pour votre réponse !

    mon problème c'est que la table source et destination ont pas les memes nom des attributs (pourtant meme shema)

    l'erreur est :
    + $exception {"Missing the DataColumn 'PRIO' for the SourceColumn 'PRIO'."} System.Exception {System.InvalidOperationException}
    requete source est:
    select left(priority_code,1), resolved_time,open_time
    from tABLEx WHERE [condition]
    requete dest (celle de builder

    select PRIO,FIXED_TIME,C_DATE
    from tableY
    donc voila, les noms des attributs et de tables sont différents

    qu'est ce que je doit faire ?

    merci

  4. #4
    Invité
    Invité(e)
    Par défaut
    Alors pour te faciliter la tâche le plus simple serait de passer par SSIS (SQL Server Integration Service). Tu trouveras un excellent cours sur developpez.com plus précisément ici.

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par sayfouche Voir le message
    mon problème c'est que la table source et destination ont pas les memes nom des attributs (pourtant meme shema)
    Dans ce cas il suffit de renommer les colonnes de la DataTable...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    table.Columns[0].ColumnName = "PRIO";
    table.Columns[1].ColumnName = "FIXED_TIME";
    table.Columns[2].ColumnName = "C_DATE";

  6. #6
    Membre expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Points : 3 173
    Points
    3 173
    Par défaut
    Creez simplement des servers liés:
    http://msdn.microsoft.com/fr-fr/libr...=sql.105).aspx

    Ne passez surtout pas par des dataTables c'est extremement lent!!!


    Au pire passez par SSIS (fichiers plats, bulk INSERT...)
    Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
    MCTS Database Development
    MCTS Database Administration

Discussions similaires

  1. [XL-2010] Alimenter une listbox avec les données d'une feuille par ordre décroissant
    Par lavineur dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 24/03/2015, 13h56
  2. Remplir une table avec les données d'une base
    Par doc dans le forum Général Java
    Réponses: 2
    Dernier message: 25/06/2012, 00h48
  3. [MySQL] Remplir une table avec les données d'une autre table
    Par Souri84 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 26/11/2010, 19h41
  4. [MySQL] Modification des données d'une base par les membres
    Par pod1978 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 22/03/2006, 17h25
  5. Réponses: 2
    Dernier message: 11/10/2005, 09h15

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