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 :

page aspx qui passe un Txt file dans une table de BDD [Débutant]


Sujet :

C#

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Etudiant
    Inscrit en
    Janvier 2013
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2013
    Messages : 60
    Points : 38
    Points
    38
    Par défaut page aspx qui passe un Txt file dans une table de BDD
    Hello,

    je suis entrain de faire une page Aspx (c#,asp.net) qui permettra de passer un txt file contenant la gestion de rotation des quarts de personnes, donc dans cette page j'ai:

    -un <asp:FileUpload> qui vas contenir le fichier Txt
    -un <asp:TextBox> qui vas contenir une année (2014 dans l'example qui arrive)
    -un <asp:Button> qui permet de send et effectuer la mise à jour de la BDD

    Alors mon Txt file contient ceci: (il continue jusque dec 31)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    *       M  S  N  R  R  J
    jan  1  A  B  D  E  F  C
    jan  2  A  B  D  E  F  C
    jan  3  F  A  B  D  E  C
    jan  4  F  A  B  D  E  C
    jan  5  C  F  A  B  D  E
    jan  6  C  F  A  B  D  E
    jan  7  D  C  F  A  B  E
    jan  8  D  C  F  A  B  E
    jan  9  B  D  C  F  A  E
    et la table rotation contiens:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    [ROT_ID] int, not null (autoincrement)
    [ROT_DATROTATION] date, not null (concatenation des valeurs du txt file + txt box année)
    [ROT_PERIODE] string, not null (Qui representera le header du txt file: M S N R R J)
    [ROT_QUAID] string, not null (dans la table quart nous avons: QUA_ID et QUA_NOM, les QUA_NOM sont: A B C D E F)
    [ROT_ANNEE] int, not null (que je recupere via la txt box année)
    [ROT_MOIS] int, not null (que je recupere via le txt file)
    [ROT_JOUR] int, not null (que je recupere via le txt file)

    je serais faire la réalisation des requetes SQL.
    Mais je n'ai aucune idée de comment 'parsé' les données du Txt file pour les mettre dans la requete correctement
    j'ai cherché toute la matiné sur le net et je n'ai aucune idée de comment m'y prendre.
    je tiens a préciser que je suis dans une entreprise qui essaie de se SUR-proteger, donc je ne peux pas DL: un csv parser, nuget ou autre.
    je suis sous VS 2010 SP1.


    Dans la finalité je souhaiterais avoir ceci

    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
     
    [ROT_ID]1
    [ROT_DATROTATION] 01/01/2014
    [ROT_PERIODE] M
    [ROT_QUAID]A
    [ROT_ANNEE] 2014
    [ROT_MOIS] 01
    [ROT_JOUR] 01
     
    [ROT_ID]2
    [ROT_DATROTATION] 02/01/2014
    [ROT_PERIODE] S
    [ROT_QUAID]B
    [ROT_ANNEE] 2014
    [ROT_MOIS] 01
    [ROT_JOUR] 02
     
    Etc etc

  2. #2
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Le .NET Framework contient nativement un parser CSV. Pour l'utiliser il faut utiliser la classe TextFieldParser. Il y a un exemple d'utilisation sur le lien.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Etudiant
    Inscrit en
    Janvier 2013
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2013
    Messages : 60
    Points : 38
    Points
    38
    Par défaut
    Citation Envoyé par DotNetMatt Voir le message
    Le .NET Framework contient nativement un parser CSV. Pour l'utiliser il faut utiliser la classe TextFieldParser. Il y a un exemple d'utilisation sur le lien.
    ca ne m'aide pas dans le sens, je ne sais pas par ou commencer, ce que je doit faire des données, dans quoi je doit les stockées, etc


    Ce qui serait parfait, c'est que j'arrive a stockée dans un tableau (ou listitems) un truc du genre:

    Ligne 1: [jan] [1] [A] [M] (mois, jour, quart, header du quart)
    Ligne 2: [jan] [1] [B] [S]
    Ligne 3: [jan] [1] [D] [N]
    [..................]
    Ligne X: [jan] [9] [B] [M]

  4. #4
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Le code présenté sur le lien que je t'ai donné stocke les données dans un tableau de strings (variable currentRow). Ensuite on boucle (while) jusqu'à la fin du fichier pour lire ligne par ligne (méthode ReadFields). Dans l'exemple ils ont utilisé un séparateur de type délimité. A chaque fois que le séparateur est rencontré, on rajoute une colonne dans le tableau de strings, avec la valeur.

    Au fur et à mesure de la lecture (dans le while) on peut très bien imaginer rajouter la variable currentRow dans une liste (List<string[]>). Une fois le traitement terminé, il n'y a plus qu'à traiter la liste, comme une liste classique :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    foreach (string[] row in myList)
    {
        var value1 = row[0];
        var value2 = row[1];
    }

    Pour passer le code en C#, utilise un convertisseur.

    A toi de jouer avec cet exemple et de voir ce qu'on peut faire, on ne va pas faire tout le boulot à ta place. Tu peux faire un projet de test à côté pour pouvoir voir comment ça fonctionne, et joue avec différents paramètres. Si tu as des erreurs ou des problèmes de logique précis, là on pourra t'aider

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Etudiant
    Inscrit en
    Janvier 2013
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2013
    Messages : 60
    Points : 38
    Points
    38
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    using Microsoft.VisualBasic.FileIO
    n'est pas reconnu, je n'arrive meme pas a utiliser le textfieldparser


    meme avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     using Microsoft.VisualBasic
                                using System.Object
    je voit pas dans quel import je peux tapé

  6. #6
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Il faut d'abord ajouter une référence vers l'assembly Microsoft.VisualBasic.dll

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Etudiant
    Inscrit en
    Janvier 2013
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2013
    Messages : 60
    Points : 38
    Points
    38
    Par défaut
    Citation Envoyé par DotNetMatt Voir le message
    Il faut d'abord ajouter une référence vers l'assembly Microsoft.VisualBasic.dll
    Lui même non reconnu :s
    c'est pas grave, j'ai peux etre trouver une alternative http://tech.pro/tutorial/612/buildin...rser-in-csharp qui vas me guider pas à pas
    on va bien voir ce que ca donne, je vous tiens au courant quand j'aurais essayer avec ce guide.

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Etudiant
    Inscrit en
    Janvier 2013
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2013
    Messages : 60
    Points : 38
    Points
    38
    Par défaut
    ok j'ai reussi a parser assez facilement grace au guide, maintenant j'ai un:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     List<string[]> parsedData
    qui contient (les espaces en moins, mais je ca pour que ce soit mieux lisible)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ligne 1: *    * M S N R R J
    ligne 2: jan 1 A B D E F C
    ligne 3: jan 2 A B D E F C


    Maintenant je souhaite manipuler ce List <string[]> afin que les données soit comme cela:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    ligne 1: jan 1 A M
    ligne 2 : jan 1 B S
    ligne 3: jan 1 D N
    ligne 4: jan 1 E R
    ligne 5: jan 1 F R
    ligne 6: jan 1 C J
    ligne 7: jan 2 A M
    ligne 8; jan 2 B S
    etc etc
    En realité souhaite decouper le premier List String en un autre qui contient: Le jour + une chiffre (un quart) + son header.
    sachant qu'il y a 6 chiffres dans le header je doit donc avoir 6 lignes par jour.

    comment faire ?



    EDIT:

    je viens de revoir le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     foreach (string[] row in myList)
    {
        var value1 = row[0];
        var value2 = row[1];
    }
    Et ca commence a me parler, je vais utiliser ca pour creer une nouveau list qui contiendras ce que je souhaite.
    Je reviens si je bloque

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Etudiant
    Inscrit en
    Janvier 2013
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2013
    Messages : 60
    Points : 38
    Points
    38
    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
    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
     
            protected void BTN_send_shift_Click(object sender, EventArgs e)
            {
                string filepath = //Valuedel'uploadFile;
                List<string[]> parsedData = new List<string[]>();
     
                using (StreamReader readFile = new StreamReader(filepath))
                {
                    string line;
                    string[] row;
                    Regex r = new Regex(" +");
     
     
                    while ((line = readFile.ReadLine()) != null)
                    {
                        row = r.Split(line);
                        parsedData.Add(row);
                    }
                }
     
                bool i = true;
                string header2 ="";
                string header3 ="";
                string header4 ="";
                string header5 ="";
                string header6 ="";
                string header7 ="";
                foreach (string[] row in parsedData)
                {
                    if (i)
                    {
                        header2 = row[2];
                        header3 = row[3];
                        header4 = row[4];
                        header5 = row[5];
                        header6 = row[6];
                        header7 = row[7];
                        i = false;
                    }
                    else
                    {
                        string val0 = row[0];
                        string val1 = row[1];
                        string val2 = row[2];
                        string val3 = row[3];
                        string val4 = row[4];
                        string val5 = row[5];
                        string val6 = row[6];
                        string val7 = row[7];
     
                       // INSERTION DE REQUETE SQL ROW2
                      // INSERTION DE REQUETE SQL ROW3
                     // INSERTION DE REQUETE SQL ROW4-5-6-7
                    }
                }
            }
    j'ai reussi ! j'arrive a retourné ce que je souhaitais, mais maintenant ... je souhaite inserer le tout dans la base de données en fonction des val dans chaque passage du foreach.
    le probleme c'est qu'il y a: 365 requetes pour chaque row entre Row2 et Row7 Soit: 365*6 = 2190 sql query à realiser.

    je ne croit pas que ce soit une bonne idées, y a t'il un moyen pour faire toutes les requetes et les envoyées en un coup a la bdd ?
    je fait des recherches partout, il y a 10000 facons de faire, je ne sait pas laquel serait la plus optimisé pour moi.


    EDIT:

    je tente avec ceci: http://msdn.microsoft.com/en-us/library/dn132615.aspx
    si il y a mieux, je suis à l'écoute

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Etudiant
    Inscrit en
    Janvier 2013
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2013
    Messages : 60
    Points : 38
    Points
    38
    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
    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
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
     
         protected void BTN_send_shift_Click(object sender, EventArgs e)
            {
                string filepath = "xxxxxxxxxxxxxxxxxxxxxxxx.txt";
                List<string[]> parsedData = new List<string[]>();
     
                using (StreamReader readFile = new StreamReader(filepath))
                {
                    string line;
                    string[] row;
                    Regex r = new Regex(" +");
     
     
                    while ((line = readFile.ReadLine()) != null)
                    {
                        row = r.Split(line);
                        parsedData.Add(row);
                    }
                }
     
                bool i = true;
                List<string> dbOperations = new List<string>();
                char header2 ='X';
                char header3 ='X';
                char header4 ='X';
                char header5 ='X';
                char header6 ='X';
                char header7 ='X';
                char header = 'X';
     
                 string Sql_RotID = "Select MAX(ROT_ID) from ROTATION"; //Je selectionne la derniere ID
                        SqlCommand cmd_RotID = new SqlCommand();
                        cmd_RotID.Connection = Connection;
                        cmd_RotID.CommandText = Sql_RotID;
                        int RotID = 0;
     
                        Connection.Close();
                        Connection.Open();
                        object rotObj = cmd_RotID.ExecuteScalar();
     
                        if (rotObj.GetType() != typeof(DBNull))
                        {
                            RotID = Convert.ToInt32(rotObj);
                        }
                        Connection.Close();
     
     
                foreach (string[] row in parsedData)
                {
                    if (i)
                    {
                        header2 = Convert.ToChar(row[2]);
                        header3 = Convert.ToChar(row[3]);
                        header4 = Convert.ToChar(row[4]);
                        header5 = Convert.ToChar(row[5]);
                        header6 = Convert.ToChar(row[6]);
                        header7 = Convert.ToChar(row[7]);
                        i = false;
                    }
                    else
                    {
                        string val0 = row[0];
                        string val1 = row[1];
                        string val2 = row[2];
                        string val3 = row[3];
                        string val4 = row[4];
                        string val5 = row[5];
                        string val6 = row[6];
                        string val7 = row[7];
     
                        if(val0 == "jan") {val0 = "01";} 
                        else if (val0 == "feb") {val0 = "02";} 
                        else if(val0 == "mar") {val0 = "03";}
                        else if (val0 == "apr") {val0 = "04";} 
                        else if(val0 == "may") {val0 = "05";}
                        else if (val0 == "jun") {val0 = "06";} 
                        else if(val0 == "jul") {val0 = "07";}
                        else if (val0 == "aug") {val0 = "08";} 
                        else if(val0 == "sep") {val0 = "09";}
                        else if (val0 == "oct") {val0 = "10";} 
                        else if(val0 == "nov") {val0 = "11";}
                        else if (val0 == "dec") {val0 = "12";}
     
                        string date = String.Format("{0:dd/MM/yy}","21/11/1992");
     
                        int QuaID = 0;
                        for (int incr = 2; incr <= 7; incr++)
                        {
                            string Sql_QuaID = "Select QUA_ID from QUART WHERE QUA_NOM = @QuaNom";
                            SqlCommand cmd_QuaID = new SqlCommand();
     
                            if (incr == 2) { cmd_QuaID.Parameters.Add("@QuaNom", SqlDbType.NVarChar).Value = val2; header = header2; }
                            else if (incr == 3) { cmd_QuaID.Parameters.Add("@QuaNom", SqlDbType.NVarChar).Value = val3; header = header3; }
                            else if (incr == 4) { cmd_QuaID.Parameters.Add("@QuaNom", SqlDbType.NVarChar).Value = val4; header = header4; }
                            else if (incr == 5) { cmd_QuaID.Parameters.Add("@QuaNom", SqlDbType.NVarChar).Value = val5; header = header5; }
                            else if (incr == 6) { cmd_QuaID.Parameters.Add("@QuaNom", SqlDbType.NVarChar).Value = val6; header = header6; }
                            else if (incr == 7) { cmd_QuaID.Parameters.Add("@QuaNom", SqlDbType.NVarChar).Value = val7; header = header7; }
     
                            cmd_QuaID.Connection = Connection;
                            cmd_QuaID.CommandText = Sql_QuaID;
     
                            Connection.Open();
                            QuaID = (Int32)cmd_QuaID.ExecuteScalar();
                            Connection.Close();
                            cmd_QuaID.Dispose();
     
                            RotID++;
                            dbOperations.Add("INSERT INTO ROTATION (ROT_ID, ROT_DATROTATION, ROT_PERIODE, ROT_QUAID, ROT_ANNEE, ROT_MOIS, ROT_JOUR) VALUES (" + (RotID) + "," + date + ",'" + header + "'," + QuaID + "," + TXTB_annee_shift.Text + "," + val0 + "," + val1 + ")");          
     
                        }
                    }
                }
     
     
                    Connection.Open();
                    SqlTransaction transaction = Connection.BeginTransaction();
     
                    foreach (string commandString in dbOperations)
                    {
                        SqlCommand cmd = new SqlCommand(commandString, Connection, transaction);
                        cmd.ExecuteNonQuery();
                    }
     
                    transaction.Commit();
            }
    Code fonctionnel TOUT s'insere dans la base de données, les bonnes valeurs aux bonnes places.


    Merci a tous pour votre aide

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

Discussions similaires

  1. [WD16] Importation d'un fichier .TXT (tableaux) dans une table
    Par moimoi78 dans le forum WinDev
    Réponses: 4
    Dernier message: 11/04/2011, 18h28
  2. Macro qui va chercher des conditions dans une table
    Par piflechien73 dans le forum VBA Access
    Réponses: 5
    Dernier message: 13/09/2009, 22h29
  3. [VBA] fonction qui donne la valeur présente dans une table
    Par zanou666 dans le forum VBA Access
    Réponses: 7
    Dernier message: 25/09/2007, 17h33
  4. Importer un txt (csv) dans une table mysql sur multimania
    Par minogttao dans le forum Requêtes
    Réponses: 2
    Dernier message: 03/11/2006, 18h33
  5. deplacer un champ dans une table de BDD
    Par guillaumeIOB dans le forum PHP & Base de données
    Réponses: 17
    Dernier message: 13/10/2006, 15h42

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