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 :

Petit conseil pour mise à jour d'une base de données


Sujet :

C#

  1. #1
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    281
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 281
    Points : 47
    Points
    47
    Par défaut Petit conseil pour mise à jour d'une base de données
    Bonjour à tous,

    Je possède une base de donnée DBF.
    j'arrive à lire et à écrire dans cette base en c#.

    Je possède un fichier texte, contenant en première ligne les entête de colonnes,, et les autres lignes contiennent les valeur des champs.
    Chaque champs est séparé par une tabulation ($09).

    Je souhaiterai mettre à jour la base de données DBF avec ce fichier texte.

    1) Je pourrais lire chaque ligne et faire des Insert, mais je trouve cette méthode brut et pas très intelligente.
    2) Je pense qu'il doit être possible d'utiliser la puissance du Dataset ? C'est a dire, injecter le fichier texte dans un dataset , puis envoyer ce dataset vers ma base de données, qu'en pensez vous ?

    Quel vous semble la méthode la meilleur, et la plus "propre" ?

    Auriez vous un petit exemple afin d'envoyer mon fichier txt dans ce dataset sachant que le séparateur est un caractère tabulation ?

    Je vous remercie beaucoup pour votre assistance

    Bien cordialement,

    Nixeus

  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
    Citation Envoyé par Nixeus Voir le message
    1) Je pourrais lire chaque ligne et faire des Insert, mais je trouve cette méthode brut et pas très intelligente.
    Pourquoi ? C'est simple et intuitif, je ne vois pas de problème particulier avec cette approche. La solution la plus simple est souvent la meilleure, faut pas systématiquement chercher à faire plus compliqué...

    Citation Envoyé par Nixeus Voir le message
    2) Je pense qu'il doit être possible d'utiliser la puissance du Dataset ? C'est a dire, injecter le fichier texte dans un dataset , puis envoyer ce dataset vers ma base de données, qu'en pensez vous ?
    Bah ça revient un peu au même, mais avec une étape de plus... Il faudra quand même que tu lises le fichier pour l'importer dans le DataSet. En plus, si le volume de données est important, ça va poser des problèmes de mémoire, que tu n'aurais pas en insérant les données dans la base au fur et à mesure qu'elles sont lues dans le fichier.

    Sinon, regarde si le SGBD ne propose pas un système pour importer directement des fichiers texte, c'est encore la solution la plus simple.

  3. #3
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    281
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 281
    Points : 47
    Points
    47
    Par défaut
    Bonjour,

    Merci de ta rapide réponse.
    Je ne souhaite pas le faire avec le SGBD car le but va être d'automatiser cette tache d'importation.

    J'ai trouvé un morceau de code assez simple pour importer un fichier texte avec des séparateurs dans un DataSet et cela fonctionne, ca me permet déja de le charger dans un datagrid et donc de pouvoir le visualiser afin de voir si tout est OK.

    Je vais maintenant voir pour envoyer ce dataset vers la base de données.

    Pour infos voici une fonction permettant d'envoyer un fichier txt vers un Dataset

    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
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
     
    public static DataSet Convert(string File,string TableName, string delimiter)
            {
     
                //The DataSet to Return
     
                DataSet result = new DataSet();
     
                //Open the file in a stream reader.
                Encoding m_encoding = Encoding.GetEncoding("ISO-8859-1");
                StreamReader s = new StreamReader(File, m_encoding);
     
                //Split the first line into the columns       
     
                string[] columns = s.ReadLine().Split(delimiter.ToCharArray());
     
                //Add the new DataTable to the RecordSet
     
                result.Tables.Add(TableName);
     
                //Cycle the colums, adding those that don't exist yet 
     
                //and sequencing the one that do.
     
                foreach (string col in columns)
                {
                    bool added = false;
                    string next = "";
                    int i = 0;
                    while (!added)
                    {
                        //Build the column name and remove any unwanted characters.
     
                        string columnname = col + next;
                        columnname = columnname.Replace("#", "");
                        columnname = columnname.Replace("'", "");
                        columnname = columnname.Replace("&", "");
     
                        //See if the column already exists
     
                        if (!result.Tables[TableName].Columns.Contains(columnname))
                        {
                            //if it doesn't then we add it here and mark it as added
     
                            result.Tables[TableName].Columns.Add(columnname);
                            added = true;
                        }
                        else
                        {
                            //if it did exist then we increment the sequencer and try again.
     
                            i++;
                            next = "_" + i.ToString();
                        }
                    }
                }
     
                //Read the rest of the data in the file.        
     
                string AllData = s.ReadToEnd();
     
                //Split off each row at the Carriage Return/Line Feed
     
                //Default line ending in most windows exports.  
     
                //You may have to edit this to match your particular file.
     
                //This will work for Excel, Access, etc. default exports.
     
                string[] rows = AllData.Split("\r\n".ToCharArray(),StringSplitOptions.RemoveEmptyEntries);
     
     
                //Now add each row to the DataSet        
     
                foreach (string r in rows)
                {
                    //Split the row at the delimiter.
     
                    string[] items = r.Split(delimiter.ToCharArray());
     
                    //Add the item
     
                    result.Tables[TableName].Rows.Add(items);
                }
     
                //Return the imported data.        
     
                return result;
            }

  4. #4
    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
    Effectivement, si tu veux afficher les données avant de les importer, un DataSet devient plus intéressant... (enfin en fait une DataTable suffirait, mais bon...)

Discussions similaires

  1. Petit conseil pour un projet avec une base de données
    Par PasTaper dans le forum Débuter
    Réponses: 2
    Dernier message: 06/08/2012, 17h05
  2. Fichier batch pour mise à jour d'une base
    Par docjo dans le forum VBA Access
    Réponses: 7
    Dernier message: 23/08/2009, 11h31
  3. probleme de virgule dans la mise à jour d'une base de donnée
    Par KAF dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 24/12/2005, 02h18
  4. mise à jour d'une base de données
    Par flo83 dans le forum ASP
    Réponses: 6
    Dernier message: 12/06/2005, 20h27
  5. Réponses: 4
    Dernier message: 22/09/2004, 09h17

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