Bonjour,
Voilà je travaille sur un projet qui doit partir d'un fichier Xls (excel.xls) et l'importer en DB MySQL.
J'utilise LinqToEntity pour l'importation et la lecture.
J'ai déjà réussi à lire le fichier Xls et à l'importer dans un DataTable que je passe en paramètre à une méthode pour les différents inserts.
J'insère le fichier Xls en plusieurs fois
Les étudiants :
les groupes
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 public static bool InsertEtudiant(DataTable dt) { using (var ctx = new ModelEntities()) { // query xls file var query = (from r in dt.AsEnumerable() select new { id = r.Field<double>("Matric Info"), nom = r.Field<string>("Nom Elève"), pren = r.Field<string>("Prénom Elève"), cla = r.Field<string>("AnFF_Classe") }).Distinct(); if (query.Any()) foreach (var result in query) { // Create a new classe etudiant etu = new etudiant() { Id = Convert.ToInt32(result.id), Nom = result.nom, Prenom = result.pren, Fk_Classe = result.cla }; ctx.etudiant.AddObject(etu); } try { ctx.SaveChanges(); return true; } catch { return false; } } }
Ca ca fonctionne bien insertion ok toutes les données nécessaires se trouvent en DB.
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 public static bool InsertGroupe(DataTable dt) { using (var ctx = new ModelEntities()) { int temp1 = 0; int temp2 = 0; // query xls file var query = (from r in dt.AsEnumerable() select new { id = r.Field<string>("AnFF1"), ann = r.Field<string>("AnFF"), prof = r.Field<string>("Prof Cours"), crs = r.Field<string>("Lib Cours") }).Distinct(); if (query.Any()) foreach (var result in query) { // Get id prof var queryPro = from pro in ctx.prof where pro.Nom == result.prof select pro.Id; foreach (var pro in queryPro) temp1 = Convert.ToInt32(pro); // Get id Branche var queryBra = from bra in ctx.branche where bra.Nom == result.crs select bra.Id; foreach (var bra in queryBra) temp2 = Convert.ToInt32(bra); // Create a new groupe groupe grp = new groupe() { Id = result.id, Fk_Annee = result.ann, Fk_Prof = temp1, Fk_Branche = temp2 }; ctx.groupe.AddObject(grp); } try { ctx.SaveChanges(); return true; } catch { return false; } } }
Là ou ca coince c'est quand je veux dire quel étudiant est dans quel groupe, soit la table Fk_Etudiant - Fk_Groupe (les clés des deux tables précédantes).
Je ne sais pas faire comme précédemment puisque dans le edmx, la table n'est pas présente (relation n-n).
Quelqu'un aurait-il une solution ?
Dois-je continuer d'inserer en étapes ou est-ce possible d'inserer tout le fichier en une fois, si oui comment ?
D'avance merci,
Nabu
Partager