C# XLS file beolvasás Access adatbázisba

C# XLS file beolvasás Access adatbázisba
2010-09-25T22:27:06+02:00
2010-09-27T13:37:00+02:00
2022-11-19T07:40:38+01:00
prog
Sziasztok!

Szeretnék segítséget kérni, hogy C#-ban hogyan tudnék egy openFileDialoge segítségével megadott MS Excel (.XLS) fileból adatokat kiolvasni és egy már meglévő MS Access (.MDB) adatbázisfilehoz hozzácsatolni? Fontos lenne hogy a meglévő Access adatbázisfilet ne írja felül, hanem csak frissítse az új adatokkal

Ezzel a megoldással próbálkoztam, de sajnos nem működik Hibát nem ír a futás során, de nem importálja az adatokat az Excel fileból


private void button1_Click(object sender, EventArgs e) { string import_fajl = ""; ImportSpreadsheet(import_fajl, "Munka1"); using (OpenFileDialog dlg = new OpenFileDialog()) { if (dlg.ShowDialog() == DialogResult.OK) { import_fajl = dlg.FileName; } } } public void ImportSpreadsheet(string fileName, string sheetName) { string excelConnStr = "Provider=Microsoft.Jet.OLEDB.4.0;" + @"Data Source=" + fileName + ";" + "Extended Properties=Excel 8.0;"; // set the Access table name to import the sheet into... string tableName = "fileok"; //sheetName; string accessDatabase = "|DataDirectory|\\bin\\Debug\\default.mdb"; using (OleDbConnection conn = new OleDbConnection(excelConnStr)) { try { conn.Open(); using (OleDbCommand cmd = new OleDbCommand()) { cmd.CommandText = @"SELECT * INTO [MS Access;Database=" + accessDatabase + "].[" + tableName + "] FROM [" + sheetName + "$]"; cmd.Connection = conn; cmd.ExecuteNonQuery(); } } catch (DbException ex) { Console.WriteLine("Exception: {0}\r\n Stack Trace: {1}", ex.Message, ex.StackTrace); } finally { conn.Close(); } } }


Köszi!
Mutasd a teljes hozzászólást!
Próbáld meg inkább soronként olvasni be az excel fájl adatait Interop-on keresztül, és rekordonként szúrd be az adatbázisba.

Excel interop


A másik ötlet ha nem akarsz Interop-al bajlódni, hogy először az adatokat egy új, üres táblába szúrd be, és ezután adatbázis műveletekkel már át tudod másolni a rekordokat.
Mutasd a teljes hozzászólást!

  • Előbb talán próbáld meg az OpenFileDialog-al bekérni az Excel fájlt és utánna hívd meg az Import függvényed.

    using (OpenFileDialog dlg = new OpenFileDialog()) { if (dlg.ShowDialog() == DialogResult.OK) { import_fajl = dlg.FileName; } } ImportSpreadsheet(import_fajl, "Munka1");

    és ugye az is fontos, hogy létezzen benne Munka1 nevű sheet.
    Mutasd a teljes hozzászólást!
  • Kipróbáltam így is, ahogy írtad, de sajnos miután kitallózom a filet, nem fűzi hozzá a progi az XLS adatokat az adatbázishoz
    Mutasd a teljes hozzászólást!
  • A catch részbe betettem egy MessageBox-ot, igy mostmár látom milyen hibákat ír ki.
    Rájöttem arra az imént, hogy az adatbázisfile elérési utja nem tetszett neki első körben:

    string accessDatabase = "|DataDirectory|\\bin\\Debug\\default.mdb";

    Itt most megadtam neki a pontos elérési utat, igy már tovább lép, de most ezt az üzenetet kapom a MessageBoxban:
    A következő tábla már létezik: 'fileok'.


    Az adatbázis fájlomban (default.mdb) létezik egy fileok tábla ami tartalmaz 4 mezőt. De pont azt szeretném elérni, hogy a program frissítse az adatbázis fájlomat az XLS fileból kapott adatokkal.

    Van erre valami okos ötletetek?
    Mutasd a teljes hozzászólást!
  • Próbáld meg inkább soronként olvasni be az excel fájl adatait Interop-on keresztül, és rekordonként szúrd be az adatbázisba.

    Excel interop


    A másik ötlet ha nem akarsz Interop-al bajlódni, hogy először az adatokat egy új, üres táblába szúrd be, és ezután adatbázis műveletekkel már át tudod másolni a rekordokat.
    Mutasd a teljes hozzászólást!
  • "A másik ötlet ... az adatokat egy új, üres táblába szúrd be, és ezután adatbázis műveletekkel már át tudod másolni a rekordokat."


    Ez mindenképpen indokolt, hiszen az XLS különösen alkalmas kiszámíthatatlan tartalom tárolására, így érdemes egy ellenörzési fázis beillesztése az éles adatok közé beszúrás elé. Valamint jobban biztosítható az éles adatokba átemelés egy rövid, interakció mentes tranzakcióba fogása.
    Mutasd a teljes hozzászólást!
  • Köszönöm a válaszokat! :)
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd