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

ASP.NET Discussion :

[tutoriel] Importer et exporter des données en masse au travers d'une application ASP.Net


Sujet :

ASP.NET

  1. #21
    Expert confirmé
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Par défaut
    Citation Envoyé par iberserk Voir le message
    Que ferez vous si d'autres applications développées par d'autres personnes commencent à 'taper' dans votre base et la vérole complétement car ils n'ont pas les mêmes règles métiers embarquées dans LEUR code client?
    Je leur propose des services WCF seulement. Ils seront obligés de se soumettre.
    Citation Envoyé par iberserk Voir le message
    Je vous encourage à lire cela, (bien sûr c'est ici vu d'un oeil de DBA)
    Ce papier a été écrit en 2005. Pas mal de choses ont changé.
    Il faut reporter la logique métier dans les procédures stockées ou les triggers.
    Grand débat en perspective a ne pas ouvrir ici
    "Winter is coming" (ma nouvelle page d'accueil)

  2. #22
    Expert confirmé
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Par défaut
    Citation Envoyé par youtpout978 Voir le message
    J'ai une problématique similaire dans le projet sur lequel je travaille, je voulais savoir si le faite de travailler avec des listes ne diminuerai pas le temps d’exécution.
    C'est à tester. L'avantage de LINQ dans ce cas et d'utiliser des IQueryable. Donc tu peux tout faire.
    "Winter is coming" (ma nouvelle page d'accueil)

  3. #23
    Expert confirmé
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Par défaut
    Citation Envoyé par iberserk Voir le message
    Que ferez vous si
    Tu peux me tutoyer
    Que feras-tu si on te demande de passer sous Oracle? Grâce au code tu auras juste à transférer les données.
    "Winter is coming" (ma nouvelle page d'accueil)

  4. #24
    Membre Expert

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    2 067
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 2 067
    Par défaut
    L'application que j'utilise permet l'import et l'export de csv mais c'est très mal fait pour importer 600 ligne ça met + d'une minute.
    J'ai déjà une idée de l'optimisation à faire, sur chaque ligne il y a l’exécution d'une soixantaine de requête (je n'imagine même pas le temps que ça mettrait avec des fichiers de 10 000 lignes), pour l'export c'est assez long puisqu'il est nécessaire de faire autant de requête pour chaque ligne.

    Il y avait un treeview dans cette même appli qui effectuait une requête chargeant plusieurs centaine d'éléments et elle était effectué à chaque fois qu'on dépliait un noeud et sur chaque élément chargé on effectuait plusieurs requête résultat 50 sec d'attente à chaque fois.
    Grâce à l'utilisation des listes je fais une seule fois la grosse requête et je ne fait plus que deux requêtes pour déplier un noeud et c'est en c# que je fait les comparaisons pour construire mes noeuds résultat 3 seconde pour déplier un noeud.

  5. #25
    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 : 43
    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
    Par défaut
    Que feras-tu si on te demande de passer sous Oracle? Grâce au code tu auras juste à transférer les données.
    On me demandera dans ce cas là de réaliser le batch d'import des données... refaire la proc stock me prendra au bas mot 1minute 30...

    Quoi qu'on veuille bien essayer de nous faire croire, un client vous demandant de migrer de SQL SERVER vers ORACLE... je veux bien prendre le risque.

    SQL etant normé, si c'est bien fait le travail n'est pas enorme...


    Ce papier a été écrit en 2005. Pas mal de choses ont changé.
    Je ne trouve pas?

    Grand débat en perspective a ne pas ouvrir ici
    Ca marche

  6. #26
    Expert confirmé
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Par défaut
    C'est pas souvent qu'on voit passer des Architectes de base de données sur cette partie du forum. C'est cool

    J'espère que tu passeras souvent!
    "Winter is coming" (ma nouvelle page d'accueil)

  7. #27
    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 : 43
    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
    Par défaut
    C'est pas souvent qu'on voit passer des Architectes de base de données sur cette partie du forum. C'est cool

    J'espère que tu passeras souvent!
    Ca c'est gentil, mais c'est un plaisir tant qu'on ne bascule pas dans lasempiternelle gueguerre EXPERT.NET/ EXPERT BDD

    Il faut dire que je viens du .NET à la base donc je connais bien les deux...

  8. #28
    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 : 43
    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
    Par défaut
    Petit test rapide:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    IF EXISTS(SELECT * FROM sys.tables WHERE NAME='TEST')
    	DROP TABLE dbo.TEST
    GO
    CREATE TABLE dbo.TEST
    (
    	TEST_ID INTEGER NOT NULL CONSTRAINT PK_TEST PRIMARY KEY CLUSTERED,
    	TEST_NAME VARCHAR(50) NOT NULL
    )
    GO
    Méthode 'LINQ':

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    INSERT INTO dbo.TEST VALUES (1,'TEST 1')
    INSERT INTO dbo.TEST VALUES (2,'TEST 2')
    INSERT INTO dbo.TEST VALUES (3,'TEST 3')
    INSERT INTO dbo.TEST VALUES (4,'TEST 4')
    INSERT INTO dbo.TEST VALUES (5,'TEST 5')
     
    UPDATE dbo.TEST SET TEST_NAME=TEST_NAME+CAST(TEST_ID AS VARCHAR) WHERE TEST_ID=1
    UPDATE dbo.TEST SET TEST_NAME=TEST_NAME+CAST(TEST_ID AS VARCHAR) WHERE TEST_ID=2
    UPDATE dbo.TEST SET TEST_NAME=TEST_NAME+CAST(TEST_ID AS VARCHAR) WHERE TEST_ID=3
    UPDATE dbo.TEST SET TEST_NAME=TEST_NAME+CAST(TEST_ID AS VARCHAR) WHERE TEST_ID=4
    UPDATE dbo.TEST SET TEST_NAME=TEST_NAME+CAST(TEST_ID AS VARCHAR) WHERE TEST_ID=5

    Regardez les plans d'executions... 5 insertions dans l'index, 5 mise à jour...


    Méthode ensembliste (recréez la table au préalable...):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
    INSERT INTO dbo.TEST 
    SELECT 1,'TEST 1'
    UNION ALL
    SELECT 2,'TEST 2'
    UNION ALL
    SELECT 2,'TEST 3'
    UNION ALL
    SELECT 2,'TEST 4'
    UNION ALL
    SELECT 2,'TEST 5'
     
    UPDATE dbo.TEST SET TEST_NAME=TEST_NAME+CAST(TEST_ID AS VARCHAR)
    Une insertion dans l'index, une mise à jour...


    Bien sûr cet exemple est simpliste...

  9. #29
    Membre Expert

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    2 067
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 2 067
    Par défaut
    Voila j'ai modifié ton code d'insertorupdate à ma sauce, je pense que cette méthode n'est pas trop mauvaise quand on insert des fichier de plusieur miliers de ligne mais quand le fichier ne contient que quelque ligne vaut mieux faire un update champs par champs:

    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
    64
     
      /// <summary>
        /// Insère un objet Person en base ou met à jour un enregistrement existant
        /// </summary>
        /// <param name="persons">Liste d'objet Person</param>
        public static void InsertOrUpdate(IEnumerable<Persons> persons)
        {
     
            using (PersonDataContext db = new PersonDataContext())
            {
                List<Persons> inbase = db.Persons.ToList();
                List<Persons> newPerson = new List<Persons>();
                int nbInBase=inbase.Count;
                foreach (var p in persons)
                {
                     // Si le Guid est vide ou la base est vide
                    if (p.PersonId == Guid.Empty || nbInBase == 0)
                    {
                        // Si le Guid est vide
                        if (p.PersonId == Guid.Empty)
                        {
                            // On génère un nouvel identifiant
                            p.PersonId = Guid.NewGuid();
     
                        }
                        // On l'ajoute a la liste des insertions
                        newPerson.Add(p);
                    }
                    else
                    {
                        // sinon on recherche s'il est déjà en base
                        if (inbase.Exists(per => per.PersonId == p.PersonId))
                        {
                            // s'il est en base on récupère la personne avec le même id
                            var pInBase = inbase.Single(per => per.PersonId == p.PersonId);
     
                            // si son nom ou son prénom diffère on les change
                            if (!(pInBase.FirstName == p.FirstName && pInBase.LastName == p.LastName))
                            {
                                pInBase.FirstName = p.FirstName;
                                pInBase.LastName = p.LastName;
                            }
                        }
                        else
                        {
                            // s'il n'est pas en base on l'ajoute à la liste des insertions
                            newPerson.Add(p);
                        }
                    }
     
                }
     
                // si la liste des insertions n'est pas vide
                if (newPerson.Count > 0)
                {
                    // on insère toutes les données en base
                    db.Persons.InsertAllOnSubmit(newPerson);
                }
                // on valide les modifications
                db.SubmitChanges();
            }
     
     
        }
    Sinon ton code est vraiment efficace au niveau de l'export

    Par contre dans ton exemple un coup tu as une table Persons et un autre coup c'est Person donc si on copie ton code à l'identique on a des erreurs et il manque la méthode load (même si elle est pas compliqué a codé).

    Merci pour l'article

  10. #30
    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 : 43
    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
    Par défaut
    Bonjour.

    A quoi sert cette partie?:

    // s'il est en base on récupère la personne avec le même id
    var pInBase = inbase.Single(per => per.PersonId == p.PersonId);

    // si son nom ou son prénom diffère on les change
    if (!(pInBase.FirstName == p.FirstName && pInBase.LastName == p.LastName))
    {
    pInBase.FirstName = p.FirstName;
    pInBase.LastName = p.LastName;
    }
    Vous faites ce traitement mais vous ne gérez ensuite que les insert?

  11. #31
    Membre Expert

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    2 067
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 2 067
    Par défaut
    au submitchanges ils s'occupent tout seul de faire les maj

  12. #32
    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 : 43
    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
    Par défaut
    au submitchanges ils s'occupent tout seul de faire les maj
    Sauf erreur de ma part le tracking intégré à LINQ TO SQL se charge de déterminer les colonnes à mettre à jour, cette vérification n'est pas nécessaire...

  13. #33
    Membre Expert

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    2 067
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 2 067
    Par défaut
    le submitchanges est nécessaire pour apporter les modification en base sinon la modification n'est effective qu'en mémoire
    http://msdn.microsoft.com/fr-fr/library/bb399378.aspx

  14. #34
    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 : 43
    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
    Par défaut
    e submitchanges est nécessaire pour apporter les modification en base sinon la modification n'est effective qu'en mémoire
    http://msdn.microsoft.com/fr-fr/library/bb399378.aspx
    Je neparle pas du submit changes mais du test que vous faites pour savoir si les données ont changées...

  15. #35
    Membre Expert

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    2 067
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 2 067
    Par défaut
    C'est cette partie qui s'occupe de faire les mise à jour :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    // s'il est en base on récupère la personne avec le même id
    var pInBase = inbase.Single(per => per.PersonId == p.PersonId);
     
    // si son nom ou son prénom diffère on les change
    if (!(pInBase.FirstName == p.FirstName && pInBase.LastName == p.LastName))
    {
    pInBase.FirstName = p.FirstName;
    pInBase.LastName = p.LastName;
    }
    en récupérant ma liste
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    List<Persons> inbase = db.Persons.ToList();
    dans le datacontext courant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    using (PersonDataContext db = new PersonDataContext())
    et en effectuant une modification sur ces données linq comprendra que c'est ses données qui ont été modifiées

  16. #36
    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 : 43
    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
    Par défaut
    Je vous ai bien compris, ce que je veux dire c'est que ca:

    if (!(pInBase.FirstName == p.FirstName && pInBase.LastName == p.LastName))

    Est pour moi inutile... enlevez ce test et si il n'y a aucune modif, le context ne fera pas d'UPDATE...

  17. #37
    Membre Expert

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    2 067
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 2 067
    Par défaut
    d'accord merci j'avais peur que de faire ça fasse perdre du temps mais si ça modifie rien bein tant mieux

    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
     
      /// <summary>
        /// Insère un objet Person en base ou met à jour un enregistrement existant
        /// </summary>
        /// <param name="persons">Liste d'objet Person</param>
        public static void InsertOrUpdate(IEnumerable<Persons> persons)
        {
     
            using (PersonDataContext db = new PersonDataContext())
            {
                List<Persons> inbase = db.Persons.ToList();
                List<Persons> newPerson = new List<Persons>();
                int nbInBase=inbase.Count;
                foreach (var p in persons)
                {
                     // Si le Guid est vide ou la base est vide
                    if (p.PersonId == Guid.Empty || nbInBase == 0)
                    {
                        // Si le Guid est vide
                        if (p.PersonId == Guid.Empty)
                        {
                            // On génère un nouvel identifiant
                            p.PersonId = Guid.NewGuid();
     
                        }
                        // On l'ajoute a la liste des insertions
                        newPerson.Add(p);
                    }
                    else
                    {
                        // sinon on recherche s'il est déjà en base
                        if (inbase.Exists(per => per.PersonId == p.PersonId))
                        {
                            // s'il est en base on récupère la personne avec le même id
                            var pInBase = inbase.Single(per => per.PersonId == p.PersonId);
     
                                pInBase.FirstName = p.FirstName;
                                pInBase.LastName = p.LastName;
     
                        }
                        else
                        {
                            // s'il n'est pas en base on l'ajoute à la liste des insertions
                            newPerson.Add(p);
                        }
                    }
     
                }
     
                // si la liste des insertions n'est pas vide
                if (newPerson.Count > 0)
                {
                    // on insère toutes les données en base
                    db.Persons.InsertAllOnSubmit(newPerson);
                }
                // on valide les modifications
                db.SubmitChanges();
            }
     
     
        }

  18. #38
    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 : 43
    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
    Par défaut
    youtpout978, quel est le contexte de votre batch?

    Un fichier CSV?

    Sachez qu'une procédure stockée faisant un BULKINSERT (bulkinsert permet de charger en masse un fichier plat dans une table) de votre fichier CSV dans une table de travail puis deux requêtes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    UPDATE C
    SET C.firstName=T.firstName,
          C.lastName=T.lastname
    FROM customer C
       INNER JOIN TABLETRAVAIL T 
          ON T.ID=C.ID
    WHERE C.firstname<>T.firstname OR C.lastname<>T.lastname
    Pour mettre a jour tous les customers existants d'un coups
    Puis

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO customer(firstname,lastname) SELECT firstname,lastname FROM TABLETRAVAIL T WHERE NOT EXISTS(SELECT * FROM customer WHERE id=T.id)
    pour insérer les nouveaux customer

    Prendrait au bas mots 1 secondes? peut être deux?...


    Le bulk insert:

    http://msdn.microsoft.com/fr-fr/library/ms188365.aspx

  19. #39
    Membre Expert

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    2 067
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 2 067
    Par défaut
    là c'était juste pour améliorer le code de de son exemple, l'appli que j'utilise est tellement bien faite que tu deviendrais aveugle en voyant l'application et la base

  20. #40
    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 : 43
    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
    Par défaut
    A ok pardon

Discussions similaires

  1. Réponses: 0
    Dernier message: 06/11/2011, 12h24
  2. importer et exporter des données depuis excel
    Par thonyyzz dans le forum C++
    Réponses: 2
    Dernier message: 22/04/2008, 20h18
  3. importer et exporter des données
    Par denza1 dans le forum Bases de données
    Réponses: 3
    Dernier message: 13/12/2004, 16h34

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