Ik heb een import-functie geschreven, die vanuit een Excel-bestand alle data van een personeelslijst inlees in een dataset. Dit ging tot op heden altijd goed, maar nu heb ik een bestand waarbij ik een error krijg.
Ik open de file dmv een OleDbConnection en haal dan het schema op van de tabellen. Vervolgens loop ik hier doorheen en haal dmv een 'select *' alle data op uit de tabellen.
Normaal gesproken is dit 1 tabel: Personeelslijst. Maar in dit geval zag ik tijdens het debuggen dat er volgens het schema twee tabellen in het bestand zitten: 'Personeelslijst$' en 'Personeelslijst$_'. Vervolgens krijg ik een melding dat deze laatste niet bestaat.
Wanneer ik het bestand in Excel open, zie ik inderdaad ook maar 1 sheet: 'Personeelslijst'. Mijn vraag is dus het het komt dat het schema een tweede tabel ziet en wat ik er aan kan doen om deze te verwijderen of in de code dit kan afvangen.
Het is een generieke module, dus zomaar de tweede tabel negeren is geen optie.
Ik open de file dmv een OleDbConnection en haal dan het schema op van de tabellen. Vervolgens loop ik hier doorheen en haal dmv een 'select *' alle data op uit de tabellen.
Normaal gesproken is dit 1 tabel: Personeelslijst. Maar in dit geval zag ik tijdens het debuggen dat er volgens het schema twee tabellen in het bestand zitten: 'Personeelslijst$' en 'Personeelslijst$_'. Vervolgens krijg ik een melding dat deze laatste niet bestaat.
Wanneer ik het bestand in Excel open, zie ik inderdaad ook maar 1 sheet: 'Personeelslijst'. Mijn vraag is dus het het komt dat het schema een tweede tabel ziet en wat ik er aan kan doen om deze te verwijderen of in de code dit kan afvangen.
Het is een generieke module, dus zomaar de tweede tabel negeren is geen optie.
C#:
1
2
3
4
5
6
7
8
9
10
11
| OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filename + ";Extended Properties=\"Excel 8.0;HDR=YES;\""); conn.Open(); DataTable table = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[]{null, null, null, "TABLE"}); foreach (DataRow row in table.Rows) { string tableName = row["TABLE_NAME"].ToString(); OleDbDataAdapter adapter = new OleDbDataAdapter("SELECT * FROM [" + tableName + "]", conn); DataTable sheetTable = new DataTable(name); adapter.Fill(sheetTable); } conn.Close(); |