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 :

utilisation de thread pour les mises à jour d'une table


Sujet :

C#

  1. #1
    Membre régulier
    Inscrit en
    Mars 2003
    Messages
    217
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 217
    Points : 73
    Points
    73
    Par défaut utilisation de thread pour les mises à jour d'une table
    Bonjour,
    J'ai une application en C# qui enregistre un grand volume de données dans une table mySQL. J'aimerais en même temps mettre a jour ma table statistique quand j'ai inséré mes donnees dans ma table principale. Mais pour permettre à l'utilisateur de travailler sans attendre que les mises à jour des stats soient terminer. Je veux le faire tourner en arrière plan d'où l'execution en arrière plan. Je fais appel au mise à jour par le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Action statsAction = delegate
                {
     
                    command.CommandText = "call sp_updatestats('datapreparation')";
                    command.ExecuteNonQuery();
                };
                IAsyncResult extract1Handle = statsAction.BeginInvoke(null, null);
    Est ce que ca fonctionne en arriere plan? J'ai essayé avec un thread mais j'ai rencontré beaucoup de problème au niveau de connection avec la base de données. Je peux perdre la connexion et quand j'en crée dans ma fonction qui est appellée par le thread j'ai un message qui dit que la connexion est déjà ouverte?
    Merci pour votre aide

  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
    Si tu fais ça, il vaudrait mieux que tu ouvres une nouvelle connexion dans le thread, sinon tu vas avoir une connexion qui est utilisée en même temps dans 2 threads différents, ce qui peut avoir des effets imprévisibles

  3. #3
    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 tomlev Voir le message
    Si tu fais ça, il vaudrait mieux que tu ouvres une nouvelle connexion dans le thread, sinon tu vas avoir une connexion qui est utilisée en même temps dans 2 threads différents, ce qui peut avoir des effets imprévisibles
    Surtout avec la gestion de transaction folklorique (suivant le moteur ....) de MySQL

    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

  4. #4
    Membre régulier
    Inscrit en
    Mars 2003
    Messages
    217
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 217
    Points : 73
    Points
    73
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Action statsAction = delegate
                {
                    MysqlConnection conn= new MysqlConnection(db.ConnectionString);
                    conn.Open();
                    MysqlTransaction transac=conn.BeginTransaction();
                    command.Connection=conn;
                    command.CommandText = "call sp_updatestats('datapreparation')";
                    command.ExecuteNonQuery();
                    transac.commit();
                    conn.Close();
                };
                IAsyncResult extract1Handle = statsAction.BeginInvoke(null, null);
    Surtout avec la gestion de transaction folklorique (suivant le moteur ....) de MySQL
    Est ce que la gestion de transaction n'est pas performante avec la MySQL? n'y aura t-il pas un conflit avec la 1ere connexion ouverte?

  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
    Utilise des blocs using, sinon en cas d'erreur ta connexion va rester ouverte...

    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
    Action statsAction = delegate
                {
                    using (MysqlConnection conn= new MysqlConnection(db.ConnectionString))
                    {
                        conn.Open();
                        using (MysqlTransaction transac=conn.BeginTransaction())
                        {
                            command.Connection=conn;
                            command.CommandText = "call sp_updatestats('datapreparation')";
                            command.ExecuteNonQuery();
                            transac.Commit();
                        }
                    }
                };
                IAsyncResult extract1Handle = statsAction.BeginInvoke(null, null);
    Pour ce qui est de la gestion des transactions dans MySQL, je laisse Bluedeep te répondre parce que je n'en sais rien du tout

  6. #6
    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 tomlev Voir le message
    Pour ce qui est de la gestion des transactions dans MySQL, je laisse Bluedeep te répondre parce que je n'en sais rien du tout
    Une particularité de MySql est qu’il peut utiliser différents moteurs SQL.

    Mais c'est un peu fromage OU dessert, au niveau fonctionnalités.

    Et certains ne supportent pas les transactions (notamment celui qui supporte le clustering, il me semble - à vérifier, ,car je n'utilise jamais ce SGBD, donc je me contente de répéter ce que j'ai pu lire à ce sujet).

    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

  7. #7
    Membre régulier
    Inscrit en
    Mars 2003
    Messages
    217
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 217
    Points : 73
    Points
    73
    Par défaut
    merci pour l'aide

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

Discussions similaires

  1. Requête pour la mise à jour d'une table
    Par pharminticien dans le forum SQL
    Réponses: 16
    Dernier message: 14/10/2013, 11h18
  2. Utilisation des threads pour les sockets
    Par Leaffy dans le forum Tcl/Tk
    Réponses: 7
    Dernier message: 23/08/2012, 09h52
  3. Allouer plus de mémoire pour les mises à jour.
    Par Empty_body dans le forum PostgreSQL
    Réponses: 0
    Dernier message: 14/03/2008, 15h29
  4. [OS] Perplexité pour les mises à jour ?
    Par ag566 dans le forum Apple
    Réponses: 4
    Dernier message: 11/09/2007, 16h03
  5. Historiser les mises à jour d'une table
    Par iftolotfi dans le forum Schéma
    Réponses: 2
    Dernier message: 08/06/2007, 16h14

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