Laden...

Daten aus txt-File einlesen und mit Datenbank vergleichen

Erstellt von Zylko03 vor einem Jahr Letzter Beitrag vor einem Jahr 762 Views
Z
Zylko03 Themenstarter:in
4 Beiträge seit 2022
vor einem Jahr
Daten aus txt-File einlesen und mit Datenbank vergleichen

Hallo miteinander!

Ich bin gerade an einem Programm dran, dass aus einem txt File Produktdaten auslesen soll. Also Produkt ID, Produktanzahl usw.
Die Spalten im Textfile sind mit tabstops getrennt. Das einlesen des txt Files war soweit kein Problem. Ich habe es so gelöst, dass für jede Spalte eine Liste erstellt wird und in diese Listen die jeweiligen Daten importiert werden. Das Programm soll im Hintergrund mit einer MySQL Datenbank verbunden sein. In dieser Datenbank sind alle Produkte und deren Spezifikationen aufgelistet. Nun soll das Programm mithilfe der ProduktID (Primärschlüssel) die Spezifikationen aus der Datenbank nehmen und diese in einer neuen Tabelle speichern.

Da ich mit Datenbanken und MySQL nicht besonders vertraut bin, wollte ich hier um mögliche Lösungsansätze bitten.
Ich hoffe meine Ausgangslage ist verständlich ausgedrückt 🙂

Verwendetes Datenbanksystem: MySQL
Programm: Windows Forms App (.NET Framework)

Derzeitiges Programm:


OpenFileDialog openFileDialog = new OpenFileDialog();
            if (openFileDialog.ShowDialog() == DialogResult.OK)
            {
                string pfad = openFileDialog.FileName;
                string file = Path.GetExtension(pfad);
                if (file.CompareTo(".txt") == 0)
                {
                    string[] txtlines = File.ReadAllLines(pfad);

                    var bereich = new List<string>();
                    var prodNr = new List<int>();
                    var nennbreite = new List<int>();
                    var einbaulänge = new List<double>();
                    var anzahl = new List<double>();

                    for (int i = 0; i < txtlines.Length; i++)
                    {
                        string[] daten = txtlines[i].Split('\t');
                        bereich.Add(daten[0]);

                        int temp = Convert.ToInt32(daten[1]), temp2 = Convert.ToInt32(daten[2]);
                        double temp3 = Convert.ToDouble(daten[3]), temp4 = Convert.ToDouble(daten[4]);
                        prodNr.Add(temp);
                        nennbreite.Add(temp2);
                        einbaulänge.Add(temp3);
                        anzahl.Add(temp4);

                    }



                    for (int i = 0; i < bereich.Count; i++)
                    {

                        string a = bereich[i];
                        listBox1.Items.Add(bereich[i]);
                        listBox2.Items.Add(prodNr[i]);
                        listBox3.Items.Add(nennbreite[i]);
                        listBox4.Items.Add(einbaulänge[i]);
                        listBox5.Items.Add(anzahl[i]);
                        listBox6.Items.Add(bereich[i] + " " + prodNr[i] + " " + nennbreite[i] + " " + einbaulänge[i] + " " + anzahl[i]);

                       
                        
                        string mysql = "Insert into luftbedarf.Import (Bereich,ProdNr,Nennbreite,Einbaulänge,Anzahl) Values ('" + bereich[i] + "','" + prodNr[i]+ "','" + nennbreite[i] + "','" + einbaulänge[i] + "','" + anzahl[i] + "')";

                        MySqlConnection conn = new MySqlConnection(constring);
                        MySqlCommand cmd = new MySqlCommand(mysql, conn);

                        conn.Open();
                        MySqlDataAdapter da = new MySqlDataAdapter();
                        da.SelectCommand = cmd;

                        DataTable dt = new DataTable();
                        da.Fill(dt);

                        dataGridView1.DataSource = dt;
                        conn.Close();


                    }

3.825 Beiträge seit 2006
vor einem Jahr

Ich hoffe meine Ausgangslage ist verständlich ausgedrückt

Ja, geht so.

Wieso der Umweg über die Listen ? Man könnte doch die Daten beim Lesen direkt in der Datenbank verarbeiten.

Insert kann man so machen, aber unbedingt Parameter benutzen. Und keine Umlaute in Spaltennamen.

[Artikelserie] SQL: Parameter von Befehlen

Ist den zu 100% sicher dass es den Artikel noch nicht in der Datenbank gibt ?

Was soll passieren wenn es den Artikel schon gibt ?

Aus welcher Tabelle soll der Artikel gelöscht werden ?

In "pfad" hast Du den Dateinamen mit Pfad und in "file" hast Du die Extension.

Schreib besser so :


string file = openFileDialog.FileName;
string ext = Path.GetExtension(file);
if (ext == ".txt")
    ...

Grüße Bernd

Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3