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 :

BDD multi connexions


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de rockley
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 404
    Par défaut BDD multi connexions
    Salut tout le monde

    Je suis un développeur java et je viens de me mettre très récemment au .net/c#.
    A vrai dire pour le moment je n'ai pas trop de problème pour l'adaptation, c'est très similaire. Mais là je suis en face d'un petit problème touchant les BDD.

    Je dois attaquer deux bases de données je lis la première et j'écris dans la deuxième. Jusque le c'est simple.
    Mais on vient de me dire que je ne pouvais pas créer deux connexions simultanément.

    Donc dans un premier temps j'ai le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
            public static ArrayList Charge_Table_Lecture()
            {
                ArrayList res = new ArrayList();
                Oracle _myconnection = new Oracle();
                OracleDataReader dr = _myconnection.Execute("select * from Table_Lecture");
     
                while (dr.Read())
                    res.Add(dr);
                return res;
    Puis je ferme ma connexion, j'ouvre une autre connexion sur ma TABLE_ECRITURE et je traite mon arrayList.


    Voilà l'existant et tout marche.


    Ce que je veux faire c'est de traiter enregistrement par enregistrement.
    Donc faire un dr.Read() de ma Table_Lecture, faire les traitements et juste derrière faire un dr2.Write() (ou un truque dans le même esprit).

    Savez-vous comment faire ?

    Merci d'avance de votre aide.

  2. #2
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 197
    Billets dans le blog
    1
    Par défaut
    Pourquoi ne peux-tu pas ouvrir deux connexion simultanément ?

    Si tu avais deux connexion simultanées, ce que tu cherches à faire serait effectivement ce qu'il faut faire afin de réduire au maximum la consommation mémoire.

    En revanche, puisque tu ne peux avoir qu'une connexion à la fois (mais bons sang, pourquoi ?) il ne faut surtout pas chercher à faire ligne à ligne... Il faut bel et bien lire toute la table en mémoire (et tans pis si ça rame) avant de la réinjecter toute entière dans la seconde connexion. Sinon, t'en a pour la journée à traiter 10 lignes. De toutes les opérations qu'un SGBD a à traiter, les connexion et déconnexion font partie ce que qu'il y a de plus lourd à gérer. Aussi, vu ta manière de fermer la connexion (tu ne la fermes pas explicitement) tu vas te retrouver avec des locks.
    Aussi, pour information, le GC de .NET est loin d'être stupide, et les drivers .NET non plus... Donc t'auras beau ouvrir et fermer des connexions en permanence dans ton code, elles seront remises en pool et réutilisées... et donc seront bel et bien ouvertes en même temps !

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 202
    Par défaut
    si on t'as dit que tu n'avais le droit qu'à une connexion (oublions le pourquoi ) à mon avis c'est une base, ton tu pourrais avoir 2 connexions, une sur chaque base

    après pour faire de la copie d'une base dans une autre il est rarement recommandé de faire un programme pour ca
    il vaut mieux lier les 2 sgbdr (si les bases sont sur le même serveur de données c'est encore plus idiot de passer les lignes coté c#) et traiter des lots de données
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  4. #4
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 197
    Billets dans le blog
    1
    Par défaut
    Effectivement un dblink est la meilleure solution, j'avais même pas percuté

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

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Citation Envoyé par StringBuilder Voir le message
    Effectivement un dblink est la meilleure solution, j'avais même pas percuté
    Ici la question ne porte pas tant su le dblink, que sur le fait que le traitement ne semble pas avoir à transiter via un serveur applicatif, et doit être soit "pur SQL" ou fait via un ETL.

  6. #6
    Membre éclairé Avatar de rockley
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 404
    Par défaut
    mea culpa

    Hier, j'avais tellement la tête dans le guidon que j'ai dit de la merde.
    En faite ma Table_Lecture et TABLE_ECRITURE sont les mêmes.

    Donc pour une table de quatre champs données, je dois lire les trois premiers champs, selon ce que je trouve, lire dans d'autre tables, et selon ce qu'il y a dans ses autres tables, écrire dans le quatrième champs.
    J'espère que c'est claire.
    Et c'est pour ça que je peux pas lire et écrire enregistrement par enregistrement. On m'a parlé de problèmes de curseurs (à confirmer par vous).

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

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Citation Envoyé par rockley Voir le message
    mea culpa

    Hier, j'avais tellement la tête dans le guidon que j'ai dit de la merde.
    En faite ma Table_Lecture et TABLE_ECRITURE sont les mêmes.

    Donc pour une table de quatre champs données, je dois lire les trois premiers champs, selon ce que je trouve, lire dans d'autre tables, et selon ce qu'il y a dans ses autres tables, écrire dans le quatrième champs.
    J'espère que c'est claire.
    Et c'est pour ça que je peux pas lire et écrire enregistrement par enregistrement. On m'a parlé de problèmes de curseurs (à confirmer par vous).
    Ceci doit peut être pouvoir se traiter avec une requête ensembliste (à voir en fonction du détail du traitement) ou sinon, si ce n'est pas possible, avec un curseur (qui permet de traiter ligne à ligne). Mais dans tous las cas, c'est un traitement sur le SGBD, pas dans un programme client (qui se contentera de lancer le traitement).

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 202
    Par défaut
    il va falloir être précis et détaillé, sinon on ne pourra pas t'aider ...
    ce que je comprends pour l'instant c'est que tu lis des infos de 2 tables pour mettre à jour une colonne d'une de ces 2 tables
    ces 2 tables sont elles sur la même base de données ?
    si non, les 2 bases de données sont elle sur le même sgbdr ?


    parce ca se trouve une simple requete update suffit plutot

    (du genre :
    update table _1 set colonne_4 = valeur calculées
    from table_1
    inner join table_2 on table_1.colonne_1 = table2.colonne_1
    )
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

Discussions similaires

  1. [Configuration] Multi connexions ???
    Par cilv1 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 32
    Dernier message: 14/11/2010, 14h01
  2. Gestion BDD multi-utilisateur
    Par will@w dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 24/12/2007, 19h35
  3. BDD Multi Utilisateurs.
    Par cuicui6669 dans le forum Sécurité
    Réponses: 2
    Dernier message: 19/12/2007, 08h31
  4. [Access 2007] BDD Multi Utilisateurs.
    Par Nayko dans le forum Sécurité
    Réponses: 3
    Dernier message: 24/11/2007, 01h17
  5. serveur tchat C++(multi connexion) UNIX!!! linux
    Par karadoc74 dans le forum Linux
    Réponses: 2
    Dernier message: 14/06/2007, 11h30

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