Bonjour, dans le cadre d'un passage d'un fichier excell à une BD je voudrais remplir un dataSet avec mes données pour les réinjecter dans la BD par la suite.
J'ai essayé trois méthodes différentes, la première consistait à une connection OLEDB qui se connectait au fichier excell le lisait et injectait les données dans le DataSet, l'ennui est que par ce moyen, les champs dépassant 255 caractères étaient tronqués.
La seconde solution fut de passer le fichier en .CSV (séparateur et de le lire avec un StreamReader qui le recopiait dans le DataSet. Le résultat était concluant, car il résolvait le problème de longueur, mais cela tronquait tous les caractères accentués. Donc ... innaplicable.
La troisième solution est de passer du fichier excell à un fichier XML. Et ensuite de réinjecter le fichier XML dans le dataSet par la méthode "ReadXML"
le problème est que lorsque j'effectue la méthode, je n'obtiens aucune erreur, mais mon dataSet reste vide.
Voici le code de la fonction : les deux premiers essais correspondent aux résultats infructueux décrits ci-dessus.
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 string bd_travail = "XXXX"; ////Lecture du fichier excel par ODBC //fonctionnel mais on pert les caractères dépassant 255 en longueur //DataSet fichier_lot = new DataSet(); //String sConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;" + //@"Data Source=H:\D____PRG\LOTS.xls;" + //@"Extended Properties=Excel 8.0;"; //OleDbConnection objConn = new OleDbConnection(sConnectionString); //objConn.Open(); //OleDbCommand objCmdSelect = new OleDbCommand("SELECT * FROM [LOTS$]", objConn); //OleDbDataAdapter objAdapter1 = new OleDbDataAdapter(); //objAdapter1.SelectCommand = objCmdSelect; //objAdapter1.Fill(fichier_lot); //objConn.Close(); //lecture du fichier excel par stream // - fonctionnel mais on pert les caractères accentués //string chemin = @"H:\D____PRG\LOTS.csv"; //StreamReader test = new StreamReader(chemin); //DataSet fichier_lot = new DataSet(); //string ligne; //string[] ligne_data; //fichier_lot.Tables.Add(); //fichier_lot.Tables[0].Columns.Add(); //fichier_lot.Tables[0].Columns.Add(); //fichier_lot.Tables[0].Columns.Add(); //fichier_lot.Tables[0].Columns.Add(); //fichier_lot.Tables[0].Columns.Add(); //fichier_lot.Tables[0].Columns.Add(); //DataRow row_fichier_lot; //row_fichier_lot = fichier_lot.Tables[0].NewRow(); //while (test.EndOfStream == false) //{ // row_fichier_lot = fichier_lot.Tables[0].NewRow(); // ligne = test.ReadLine(); // ligne_data = ligne.Split(';'); // row_fichier_lot[0] = ligne_data[0]; // row_fichier_lot[1] = ligne_data[1]; // row_fichier_lot[2] = ligne_data[2]; // row_fichier_lot[3] = ligne_data[3]; // row_fichier_lot[4] = ligne_data[4]; // row_fichier_lot[5] = ligne_data[5]; // fichier_lot.Tables[0].Rows.Add(row_fichier_lot); //} //lecture du fichier par XML string chemin = @"H:\D____PRG\LOTS.xml"; StreamReader xml = new StreamReader(chemin); DataSet fichier_lot = new DataSet(); fichier_lot.Tables.Add("Table1"); fichier_lot.Tables[0].Columns.Add("Column1"); fichier_lot.Tables[0].Columns.Add("Column2"); fichier_lot.Tables[0].Columns.Add("Column3"); fichier_lot.Tables[0].Columns.Add("Column4"); fichier_lot.Tables[0].Columns.Add("Column5"); fichier_lot.Tables[0].Columns.Add("Column6"); fichier_lot.Tables[0].ReadXml("LOTS.xml");
Voici à quoi ressemble mon fichier LOTS.xml :
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 <Root> − <Row> <Column1>10</Column1> <Column2>DEMOLITION - DEMONTAGES ET EVACUATION</Column2> <Column3>10</Column3> <Column4>AFBRAAKWERKEN</Column4> <Column6>1</Column6> </Row> − <Row> <Column6>1</Column6> </Row> − <Row> <Column1>10.01</Column1> <Column2>DONNEE GENERALE</Column2> <Column6>1</Column6> </Row> − <Row> <Column1>10.02</Column1> − <Column2> Coût moyen au m2 pour plateau de bureau (surface brut) </Column2> <Column3>10.02</Column3> <Column4>Uitbreken van wanden in metselwerk, 10 cm dik</Column4> <Column5>m2</Column5> <Column6>1</Column6> </Row>
Lors de l'exécution du code, lorsque je consulte fichier_lot celui ci est entièrement vide ... j'aimerais savoir si il existe selon vous une autre solution, et le cas échéant quel pourrait être le problème à la mienne.
Merci d'avance.
Partager