/// <summary>
 /// vérifier le donnée a déjà exist dans la base de données
 /// </summary>
 /// <param name="Table">La table</param>
 /// <param name="Colonne">Le colonne de la table</param>
 /// <param name="Value">La valeur du colonne</param>
 /// <returns>bool</returns>
 private bool DonneeIsExist(string Table, string Colonne, string Value)
 {
     CmdRecherche = ConnSql.CreateCommand();
     //Rechercher ID familles en relation dans table "Familles"
     CmdRecherche.CommandText = "SELECT COUNT( " + Colonne + " ) FROM " + Table + " WHERE " + Colonne + "=@Value;";
     CmdRecherche.Parameters.AddWithValue("@Value", Value);
     CmdRecherche.ExecuteNonQuery();
     RdrReche = CmdRecherche.ExecuteReader();
     try
     {
         int Count = -1;
         if (RdrReche.Read())
         {
             Count = (int)RdrReche.GetValue(0);
         }
         if (Count > 0)
         {
             return(true);
         }
         else
         {
             return(false);
         }
     }
     catch (Exception ex)
     {
         Console.Out.WriteLine(ex.Message);
         return(false);
     }
 }
        /// <summary>
        /// Insérer les données de Familles dans la base de données, si ce nom exsite déjà,
        /// on ne l'ajoute pas
        /// </summary>
        /// <param name="Value">La valeur de nom du Familles<</param>
        private void InsererFamilles(string Value)
        {
            SqlCeCommand CmdSql = ConnSql.CreateCommand();

            Value = Regex.Replace(Value, @"\s+", " ");
            if (!DonneeIsExist("Familles", "Nom", Value))
            {
                CmdSql.CommandText = "INSERT INTO Familles(Nom) values(@FNom)";
                CmdSql.Parameters.AddWithValue("@FNom", Value);
                CmdSql.ExecuteNonQuery();
                Console.Out.WriteLine("INSERT INTO Familles(Nom) values(" + Value + ")");
            }
        }
        /// <summary>
        /// Insérer les données de SousFamilles dans la base de données, si ce nom exsite déjà,
        /// on ne l'ajoute pas
        /// </summary>
        /// <param name="Value">La valeur de nom du SousFamille</param>
        /// <param name="Famille">La valeur de nom du Famille</param>
        private void InsererSousFamilles(string Value, string Famille)
        {
            SqlCeCommand CmdSql = ConnSql.CreateCommand();

            Value = Regex.Replace(Value, @"\s{1,}", " ");
            if (!DonneeIsExist("SousFamilles", "Nom", Value))
            {
                CmdSql.CommandText = "INSERT INTO SousFamilles(Nom,IDFamille) values(@SFNom,@IDFam)";
                CmdSql.Parameters.AddWithValue("@SFNom", Value);
                CmdSql.Parameters.AddWithValue("@IDFam", GetIdByName("Familles", Famille));
                CmdSql.ExecuteNonQuery();
                Console.Out.WriteLine("INSERT INTO SousFamilles(Nom,IDFamille) values(" + Value + "," + GetIdByName("Familles", Famille) + ")");
            }
        }
        /// <summary>
        /// Insérer les données de Articles dans la base de données, si la référence exsite déjà,
        /// on ne l'ajoute pas
        /// </summary>
        /// <param name="Descrip">La valeur de la description</param>
        /// <param name="Ref">La valeur de la référence</param>
        /// <param name="Prix">La valeur de prix</param>
        /// <param name="Marque">La valeur de nom du Marque</param>
        /// <param name="SousFamille">La valeur de nom du SousFamille</param>
        private void InsererArticles(string Descrip, string Ref, double Prix, string Marque, string SousFamille)
        {
            SqlCeCommand CmdSql = ConnSql.CreateCommand();

            if (!DonneeIsExist("Articles", "Ref", Ref))
            {
                CmdSql.CommandText = "INSERT INTO Articles(Description,Ref,Prix,IDMarque,IDSousFamille)"
                                     + "values(@ADspt,@ARef,@APrix,@AIDMq,@AIDSsFm);";
                CmdSql.Parameters.AddWithValue("@ADspt", Descrip);
                CmdSql.Parameters.AddWithValue("@ARef", Ref);
                CmdSql.Parameters.AddWithValue("@APrix", Prix);
                CmdSql.Parameters.AddWithValue("@AIDMq", GetIdByName("Marques", Marque));
                CmdSql.Parameters.AddWithValue("@AIDSsFm", GetIdByName("SousFamilles", SousFamille));
                CmdSql.ExecuteNonQuery();
                Console.Out.WriteLine("INSERT INTO Articles(Description,Ref,Prix,IDMarque,IDSousFamille)values(" + Descrip + "," +
                                      Ref + "," + Prix + "," + GetIdByName("Marques", Marque) + "," + GetIdByName("SousFamilles", SousFamille));
            }
        }
        /// <summary>
        /// lecture du fichier excel et stockage les contenu dans la base de données .sdf
        /// </summary>
        /// <param name="PathExcel">le complète path du fichier Excel</param>
        /// <param name="PathSdf">le complète path du fichier Sdf</param>
        public void LectureExcel(string PathExcel, string PathSdf)
        {
            Connection(PathExcel, PathSdf);//connecter le fichier .xls et le fichier .sdf
            try
            {
                while (ReaderExcel.Read())
                {
                    //Console.Out.WriteLine(ReaderExcel.GetString(0) + ";" + ReaderExcel.GetString(1) + ";" + ReaderExcel.GetString(2) + ";" + ReaderExcel.GetString(3) + ";" + ReaderExcel.GetString(4) + ";" + ReaderExcel.GetDouble(5));

                    SqlCeCommand CmdSql = ConnSql.CreateCommand();

                    InsererMarques(ReaderExcel.GetString(2));                                // Insérer Marques

                    InsererFamilles(ReaderExcel.GetString(3));                               // Insérer Familles

                    InsererSousFamilles(ReaderExcel.GetString(4), ReaderExcel.GetString(3)); // Insérer SousFamilles

                    InsererArticles(ReaderExcel.GetString(0), ReaderExcel.GetString(1), ReaderExcel.GetDouble(5),
                                    ReaderExcel.GetString(2), ReaderExcel.GetString(4));// Insérer Articles
                }
                ReaderExcel.Close();
            }
            catch (Exception ex)
            {
                Console.Out.WriteLine(ex.Message);
            }
            finally
            {
                if (ConnOleDb.State == ConnectionState.Open)
                {
                    ConnOleDb.Close();
                    ConnOleDb.Dispose();
                }
                if (ConnSql.State == ConnectionState.Open)
                {
                    ConnSql.Close();
                    ConnSql.Dispose();
                }
            }
            Console.In.Read();
        }
 /// <summary>
 /// obtenir ID par le nom donnée de la table
 /// </summary>
 /// <param name="Table">Le nom de la table</param>
 /// <param name="NomValue">La valeur du nom</param>
 /// <returns>ID </returns>
 private int GetIdByName(string Table, string NomValue)
 {
     CmdRecherche = ConnSql.CreateCommand();
     //Rechercher ID familles en relation dans table "Familles"
     CmdRecherche.CommandText = "SELECT [ID] FROM " + Table + " WHERE Nom=@Nom;";
     CmdRecherche.Parameters.AddWithValue("@Nom", NomValue);
     CmdRecherche.ExecuteNonQuery();
     RdrReche = CmdRecherche.ExecuteReader();
     try
     {
         int IDFam = -1;
         while (RdrReche.Read())//normalement il y a qu'un resultat
         {
             IDFam = (int)RdrReche.GetValue(0);
         }
         //set le paramètre IDFam dans l'insertion de SousFamilles
         return(IDFam);
     }
     catch (Exception ex)
     {
         Console.Out.WriteLine(ex.Message);
         return(-1);
     }
 }