Partage
  • Partager sur Facebook
  • Partager sur Twitter

c# Problème Insertion données CSV dans Access

Sujet résolu
    19 juillet 2019 à 12:46:32

    Bonjour, Je doit faire un programme qui va prendre une base de données SQL SERVER et la transforme en BDD Access, j'ai voulu faire un script qui export les données en csv et qui créer chaque table dans access et qui insere les donnée csv dans access.

    Mais voila, j'ai fait une fonction qui insere ces données mais je n'arrive pas à la faire fonctionner comme prévu.

    Ma BDD est composé de 68 Tables avec un maximum de 80 000 ligne de données dans une tables. Il n'y a aucune clé étrangere ni de relation entre les tables.

    j'ai donc besoin de votre aide afin de soit trouver une autre solution soit me montrer comment modifier mon code afin de le faire fonctionner.

    Merci d'avance pour vos réponses.

    Code de la méthode:

            //----------------------------------------------------------+
            //Fonction qui insere les fichier csv dans les tables Access|
            //----------------------------------------------------------+
            public static void InsertAccess(string cheminAccess,string NomTable, string[] nomColonne, string[] typeColonne)
            {
                string colonnes = "";
                int longueurColonne = nomColonne.Length;
                Console.WriteLine(longueurColonne);
                
                //Connexion au fichier access
                OleDbConnection myConnection = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source= " + cheminAccess + ";Persist Security Info=False;");
                myConnection.Open();
                OleDbCommand myCommand = new OleDbCommand();
                myCommand.Connection = myConnection;
                
                // concatene le tableau de nom des colonnes pour la requete 
                for (int i = 0; i < longueurColonne; i++)
                {
                    if (colonnes =="") {
                        colonnes = nomColonne[i];
                    }
                    else {
                        colonnes += "," + nomColonne[i];
                    }                          
                }
                //ouvre le fichier csv
                StreamReader sr = new StreamReader("C:/Users/212722018/Desktop/csv/" + NomTable + ".csv");
                
                int nb = 0;
                string ligne ="";
                string[] Line;
                string requetes = "";
                
                while (!sr.EndOfStream)
                {
                    //met chaque données dans un tableau
                    Line = sr.ReadLine().Split(',');
                    nb++;
                    //Met des '' si la donnée est de type varchar et concatene en séparant par des , chaque données
                    for (int j = 0; j < typeColonne.Length; j++)
                    {
                        //Si c'est une donnée type varchar
                        if (typeColonne[j] == "varchar")
                        {
                            Line[j] = "'" + Line[j] + "'";
                        }
                        //Si c'est une donnée type réel
                         else if (typeColonne[j] == "real")
                        {
                            if(Line[j] != "")
                            {
                                if (j + 1 < typeColonne.Length)
                                {
                                    Line[j] += "." + Line[j + 1];
                                    Line[j + 1] = "ASUPPRIMER";
                                    
                                }
                                if (j+1 == typeColonne.Length)
                                {
                                    Line[j] = Line[j]; 
                                }
                            }
    
                        }
                        //Si la ligne est vide 
                        if (ligne == "")
                        {
                            ligne = Line[j];
                            ligne = ligne.Replace("ASUPPRIMER", "");
                        }
                        else
                        {
                            ligne += "," + Line[j];
                            ligne = ligne.Replace(",ASUPPRIMER", "");
                        }
                        string fin = "";
                        char espace = ' ';
                        //Si la ligne est nul
                        if (ligne.Contains(", ,"))
                        {
    
                           ligne = ligne.Replace(", ,", ",NULL,");
                            fin = ligne.Substring(ligne.Length - 2, 2);
                            fin = fin.TrimEnd(espace);
                        }
    
                        //Si la ligne contient des varchar vide
                        if (ligne.Contains(",' ',"))
                        {
                            ligne = ligne.Replace(",' ',", ",NULL,");
                            fin = ligne.Substring(ligne.Length - 2, 2);
                            fin = fin.TrimEnd(espace);
                        }
                        //Si le dernier caractère de la ligne est une virgule
                        if (fin==",") 
                        {
                            ligne += "NULL";");
                        }
                    }
                   
                    //prépare et execute la requete 
                    requetes = "INSERT INTO " + NomTable + "(" + colonnes + ") values(" + ligne + ");";
                    ligne = "";
                      myCommand.CommandText = requetes;
                      myCommand.ExecuteNonQuery();              
                }
            }

    Code de l'appel de la méthode (dans le main):

                  string[] tabtable = new string[] {"LPNTR", "COPY", "FLAGS", "NAME", "SUBENTRY", "SUBVERSION" };
                  string[] type = new string[] {"varchar","int","int","varchar","varchar","varchar"};
                  InsertAccess(cheminAccess,"Assembly", tabtable, type);
    
         string[] tabtable3 = new string[] { "ENTRY", "COPY", "BundleID","ParentID", "Name", "NODENO", "CrossSection", "Color", "Flags", "SUBENTRY", "SUBVERSION", "OuterDia" };
                              string[] type3 = new string[] { "varchar", "int", "int", "int", "varchar", "int", "real", "int", "int", "varchar", "varchar", "real" };
                              InsertAccess(cheminAccess, "Cable", tabtable3, type3);




    • Partager sur Facebook
    • Partager sur Twitter
      26 juillet 2019 à 9:59:08

      Salut,

      Tu n'expliques même pas en quoi ca ne marche pas... on va pas deviner malheureusement

      • Partager sur Facebook
      • Partager sur Twitter
        28 août 2019 à 19:44:36

        Des outils de transfert de données entre base, c'est pas ce qui manque, ça porte même un nom ce genre d'outil, un ETL.

        Prenez n'importe lequel qui support cette cochonnerie d'Access (via ODBC vraisemblablement) et c'est plier en moins de 10 minutes.

        • Partager sur Facebook
        • Partager sur Twitter
        Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.

        c# Problème Insertion données CSV dans Access

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown