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

C# Discussion :

Requete SQL contenant 2 databases différentes


Sujet :

C#

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 64
    Points : 40
    Points
    40
    Par défaut Requete SQL contenant 2 databases différentes
    Bonjour !
    Je suis nouveau sur C#, je suis capable d'ouvrir une connection ODBC et Ole a mes 2 DB.

    Je fais ceci en VBA Access:

    -----------
    'tblClient = MySQL
    'tblClient1 = Access .accdb

    sSQL = "INSERT INTO tblClient SELECT * FROM tblClient1"
    CurrentDb.Execute sSQL
    etc.....
    -----------
    J'ai 2 databases, une est MySQL et l'autre un fichier Access .accdb

    En fait, je met à jour la table client dans Access avec les données de MySQL.
    Comme je disais, dans Access ca va super bien. Mes 2 tables client sont ajouter a mes sources de table dans Access.

    En C# comment j'ouvre mes connection/command pour pouvoir executer cette requetes ?

    Merci a tous !

  2. #2
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2005
    Messages
    700
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2005
    Messages : 700
    Points : 488
    Points
    488
    Par défaut
    Je ne suis pas très doué dans ce domaine, mais afin de te donner un coup de pouce, je te dirai qu'il faut que tu regarde du coté de ADO, c'est un peu le fer de lance de .NET et je suis sur que c'est ce qu'il te faut.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 64
    Points : 40
    Points
    40
    Par défaut
    Merci !

    Oui je connais ADO. Je réussis a ouvrir et aller chercher des données en C# avec les objet OdbcConnection, OdbcCommand, OdbcDataReader.

    Ce que je veux c'est de pouvoir faire une requête qui contient 2 databases ex.:

    sSQL = "INSERT INTO [DATABASES_1].tblClient SELECT * FROM [DATABASES_2].tblClient"

    Je ne sais pas quel objet utiliser pour faire ceci.

    Merci !

  4. #4
    Membre éprouvé Avatar de sisqo60
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2006
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 754
    Points : 1 188
    Points
    1 188
    Par défaut
    Bonjour,

    Ce que tu souhaites faire, c'est de la réplication (voire de la synchronisation) de données? Il y a des outils pour ça, tu n'es forcément pas tributaire du provider (ADO, OLEDB, ODBC). Les providers sont une couche en dessous de toi, tu n'as pas à t'en soucier normalement sauf pour les connectionstring.
    Si c'est le cas, tu peux faire des recherches sur la réplication/synchronisation de données entre deux bases. Ce sera plus simple et cela t'éviteras de réinventer la roue carré

    Deuxième solution :
    http://dev.mysql.com/doc/refman/5.0/...-linked-tables

    troisième solution :
    Tu crées deux connections une à access l'autre à mysql avec ton datareader mysql tu itéres sur chaque enregistrement et tu crées une requête d'insertion que tu executes sur access.

    Bon dév.
    Un âne se croit savant parce qu'on le charge de livres (proverbe américain)

    N'oubliez pas de avant de
    Pas de question techniques par MP, c'est contre la philosophie du forum

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 64
    Points : 40
    Points
    40
    Par défaut
    Bonjour !

    Pour ce cas precis oui, je veux faire de la replication...Merci !!!

    En fait c'est plusieurs technicien qui doivent mettre a jour leurs donner a distance. (Eux ils ont la BD locale Access, et le serveur distant est MySQL). Je dois leur faire un petit logiciel pour faire la synchronisation sur l'appuie d'un bouton.

    --------------------------------------------------
    Pour faire ca en Access c'est aussi simple que ca:

    Lié les 2 tables dans les source de table et ensuite executer ce code:

    sSQL = "INSERT INTO tblClient SELECT * FROM tblClient1"
    CurrentDb.Execute sSQL

    Y doit avoir un moyen d'executer cette ligne SQL en C# ??
    --------------------------------------------------
    Mais, si jamais ce n'est pas de la réplication...exemple:

    SELECT * FROM DATABASE1.tblClient WHERE (ID_Client NOT IN (SELECTtblclient.Id_Client FROM DATABASES2 WHERE Id_Client = 23));

    (Sql purement pour question ! loll)

    Merci !

  6. #6
    Membre éprouvé Avatar de sisqo60
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2006
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 754
    Points : 1 188
    Points
    1 188
    Par défaut
    Citation Envoyé par Mustard007 Voir le message
    Bonjour !

    Pour ce cas precis oui, je veux faire de la replication...Merci !!!

    En fait c'est plusieurs technicien qui doivent mettre a jour leurs donner a distance. (Eux ils ont la BD locale Access, et le serveur distant est MySQL). Je dois leur faire un petit logiciel pour faire la synchronisation sur l'appuie d'un bouton.

    --------------------------------------------------
    Pour faire ca en Access c'est aussi simple que ca:

    Lié les 2 tables dans les source de table et ensuite executer ce code:

    sSQL = "INSERT INTO tblClient SELECT * FROM tblClient1"
    CurrentDb.Execute sSQL

    Y doit avoir un moyen d'executer cette ligne SQL en C# ??
    --------------------------------------------------
    Mais, si jamais ce n'est pas de la réplication...exemple:

    SELECT * FROM DATABASE1.tblClient WHERE (ID_Client NOT IN (SELECTtblclient.Id_Client FROM DATABASES2 WHERE Id_Client = 23));

    (Sql purement pour question ! loll)

    Merci !
    Tu es sur le mauvais forum pour ça. Ta requête sql s'execute sur le context base de données pas dans ton contexte c#, donc il faut poster plutôt sur le forum Access ou MySql
    Un âne se croit savant parce qu'on le charge de livres (proverbe américain)

    N'oubliez pas de avant de
    Pas de question techniques par MP, c'est contre la philosophie du forum

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 64
    Points : 40
    Points
    40
    Par défaut
    Ok, en fait je veux simplement savoir comment je pourrais faire en C# pour que cette requette puisse fonctionner. (Je parle de C#, quel objects instancier, technique, etc.. Je ne parle pas du SQL. Ce SQL fonctionne dans Access...)


    ex.:
    sSQL = "INSERT INTO [DB1].tblClient SELECT * FROM [DB2].tblClient1"

    Je dois avoir 2 objets connections, ensuite comment je peux relier mes 2 objets pour pouvoir utiliser 1 requette qui fait appel au 2 DB (une qui est Access et l'autre MySQL) en meme temps ?

    Je sais que dans Access je pourrais linker les 2 tables et avoir seulement 1 connection oledb. Mais je veux savoir comment faire en pure C#.

    Pseudo:
    open conn1 = Access DB OLE
    open conn2 = MySQL DB

    sql="INSERT INTO conn1.tblclient SELECT * FROM conn2.tblclient";

    ObjectCommand cmd = new ObjectCommand(sql,??????on met quoi???????);
    cmd.ExecuteNonQuery;

    conn1.Close;
    conn2.Close;


    Merci !

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 93
    Points : 169
    Points
    169
    Par défaut
    Salut,

    Il n'est pas possible d'exécuter une requête sur 2 connexions distinctes.
    sisqo60 t'as donné une solution : une connexion sur Access pour lire les données, les rapatrier dans ton programme, et une connexion pour les insérer dans MySql.

    Quelque chose du genre :
    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
    using (OdbcConnection mySqlConn = new OdbcConnection("conn string vers MySQL"))
    {
        mySqlConn.Open();
     
        using (OdbcConnection accessConn = new OdbcConnection("conn string vers Access"))
        {
            accessConn.Open();
     
            OdbcCommand accessCmd = new OdbcCommand("SELECT col1, col2, ... FROM tblClient1", accessConn);
            OdbcDataReader accessReader = accessCmd.ExecuteReader();
     
            while (accessReader.Read())
            {
                OdbcCommand mySqlCmd = new OdbcCommand("INSERT INTO tbcClient(col1, col2, ...) VALUES (@val1, @val2, ...)", mySqlConn);
                mySqlCmd.Parameters.AddWithValue("@val1", accessReader[0]);
                mySqlCmd.Parameters.AddWithValue("@val2", accessReader[1]);
                ...
     
                mySqlCmd.ExecuteNonQuery();
            }
        }
    }

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 64
    Points : 40
    Points
    40
    Par défaut
    Bonjour et Merci !

    Oui pour le moment, ce que j'ai utiliser c'est de linker mes table T1 et T2 dans Access. De la j'ouvre seulement 1 connection et je peux éxecuter la requette dans C#.

    En fait ca fonctionne, ma recherche est plus sur le "comment executer ce type de requette en C#"

    Je me disais qu'on pouvais probablement "linker" chaque table dans un Dataset/datareader et ensuite faire comme ca:

    INSERT INTO [Dataset1] FROM SELECT * FROM [Dataset2]


    Ya vraiment rien comme ca qui peut se faire ?

    Merci !

  10. #10
    Membre éprouvé Avatar de sisqo60
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2006
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 754
    Points : 1 188
    Points
    1 188
    Par défaut
    Bonsoir,

    Je pense qu'il va falloir que tu revoies un peu tes cours...
    Une requête SQL, c'est pas du C#, c'est du SQL. La requête est executée dans ton moteur BDD. Dans ta chaine SQL, tu ne peux pas référencer des tables que tu aurais récupéré en C#.

    Une requête SQL pour se connecter à une autre BDD, c'est faisable et j'en ai fait mais en SQL Serveur, Oracle et quelques autres SGBDR, mais je n'ai jamais fait ça en Access, donc si tu veux savoir comment faire en Access, poses la question sur le forum Access ou fait des recherches sur internet.
    Par exemple ICI ou LA
    Un âne se croit savant parce qu'on le charge de livres (proverbe américain)

    N'oubliez pas de avant de
    Pas de question techniques par MP, c'est contre la philosophie du forum

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 64
    Points : 40
    Points
    40
    Par défaut
    Salut !
    Oui je sais, du SQL n'est pas du C#! loll

    C'est probablement ma question qui n'est pas bien poser

    Oublions le SQL.

    En C#, est-ce que je peux linker 2 tables de 2 BD differentes ?
    Ex.:
    BD1 = Access
    BD2 = MySQL

    Dataset1/Dataxxx1? = BD1.tblClient
    Dataset2/Dataxxx2? = BD2.tblClient

    Ensuite, serais-ce possible d'utiliser ces 2 dataset/dataxxx? pour executer une requette sur elle dans une meme instruction SQL ?

    Sans doute que ma question est plus claire comme ceci

    Merci a tous !!

  12. #12
    Membre actif
    Inscrit en
    Février 2006
    Messages
    522
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 522
    Points : 282
    Points
    282
    Par défaut
    Je suis quasi sur que non.
    Je suis pas un pro des dataset mais vu que tu te connectes toujours qu'a une base de donnees a la fin via ta chaine connexion j ai du mal a voir cmt tu vas pouvoir prendre des donnees de 2 datasets et les "linker" en une seule requete sql...

    tout ce que tu peux faire c est de creer 2 datasets et de recuper les donnes ds un de ton dataset access ds un premier tps et les inserer ds ta base sql via ton autre dataset... Enfin je pense

  13. #13
    Nouveau membre du Club
    Homme Profil pro
    dev
    Inscrit en
    Mai 2005
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : dev

    Informations forums :
    Inscription : Mai 2005
    Messages : 31
    Points : 36
    Points
    36
    Par défaut
    hi,
    je n 'ai pas lu l,historique des echanges a mon avis creer un db link sur un ou les deux SGBD . pour effectuer tes requetes avec eux bases.

  14. #14
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Citation Envoyé par americ Voir le message
    hi,
    je n 'ai pas lu l,historique des echanges a mon avis creer un db link sur un ou les deux SGBD . pour effectuer tes requetes avec eux bases.
    Sauf qu'un DB Link est à la base un lien inter serveur; or Access est un SGBD sans serveur, donc je ne vois pas trop comment il pourrait supporter quelque chose comme un DB Linq. Et j'ignore si MySql a un quelconque support de ce coté.

    Non, ici la seule solution est d'utiliser deux connexions avec éventuellement MS DTC (si toutefois il est supporté par MySql et par Access) pour gérer les transactions interconnexions.

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

Discussions similaires

  1. [WD17] PB avec requete SQL Server "BACKUP DATABASE"
    Par droliprane dans le forum WinDev
    Réponses: 3
    Dernier message: 13/11/2012, 21h40
  2. Réponses: 2
    Dernier message: 15/02/2010, 02h07
  3. Réponses: 10
    Dernier message: 14/09/2007, 15h02
  4. Réponses: 3
    Dernier message: 18/09/2006, 21h55
  5. [MySQL] execution fichier contenant de requete sql
    Par DarkMax dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 03/10/2005, 18h28

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