Visual Studio 2010 - C# Winforms-Anwendung - Access-DB-Abfragen

metalcat303

Grünschnabel
Halli hallo.

Ich habe mal kein Problem und trotzdem suche ich nach einem Feedback. :p

Ich habe in meiner WinForms-Anwendung einige SQL-Abfragen an meine Access-Datenbank erstellt. Diese funktionieren auch alle ohne Probleme.

Nun finde ich den Weg der Abfrage jedoch etwas umständlich und frage mich, ob es nicht eine viel einfachere/leichtere Lösung gibt, weil ich zig Mal neue DataReader-Instanzen erstellt habe.

Code:
            OleDbConnection con = new OleDbConnection();
            con.ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=H:\Bibliothek.mdb";
            OleDbCommand cmd = new OleDbCommand();
            cmd.Connection = con;

            try
            {
                con.Open();

                cmd.CommandText = "SELECT Titel, VerlagID, SpracheID, DatumID, MitarbeiterID FROM Buecher WHERE ISBNNr = " + "'" + txtisbn2.Text + "'";
                {
                    OleDbDataReader rd = cmd.ExecuteReader();
                    while (rd.Read())
                    {
                        txttitel2.Text = Convert.ToString(rd["Titel"]);
                        txtverlag2.Text = Convert.ToString(rd["VerlagID"]);
                        txtsprache2.Text = Convert.ToString(rd["SpracheID"]);
                        txtdatum2.Text = Convert.ToString(rd["DatumID"]);
                        txtnname2.Text = Convert.ToString(rd["MitarbeiterID"]);
                    }
                    rd.Close();

                    cmd.CommandText = "SELECT AutorID FROM ISBNAutor WHERE ISBNNr = " + "'" + txtisbn2.Text + "'";
                    OleDbDataReader rd1 = cmd.ExecuteReader();
                    while (rd1.Read())
                    {
                        txtautor2.Text = Convert.ToString(rd1["AutorID"]);
                    }
                    rd1.Close();

                    cmd.CommandText = "SELECT Autor FROM Autoren WHERE ID = " + txtautor2.Text;
                    OleDbDataReader rd2 = cmd.ExecuteReader();
                    while (rd2.Read())
                    {
                        txtautor2.Text = Convert.ToString(rd2["Autor"]);
                    }
                    rd2.Close();

                    cmd.CommandText = "SELECT Verlag FROM Verlag WHERE ID = " + txtverlag2.Text;
                    OleDbDataReader rd3 = cmd.ExecuteReader();
                    while (rd3.Read())
                    {
                        txtverlag2.Text = Convert.ToString(rd3["Verlag"]);
                    }
                    rd3.Close();

                    cmd.CommandText = "SELECT MNachname, MVorname, Raum, Telefon FROM Mitarbeiter WHERE ID = " + txtnname2.Text;
                    OleDbDataReader rd4 = cmd.ExecuteReader();
                    while (rd4.Read())
                    {
                        txtnname2.Text = Convert.ToString(rd4["MNachname"]);
                        txtvname2.Text = Convert.ToString(rd4["MVorname"]);
                        txtraum2.Text = Convert.ToString(rd4["Raum"]);
                        txtruf2.Text = Convert.ToString(rd4["Telefon"]);
                    }
                    rd4.Close();

                    cmd.CommandText = "SELECT Sprache FROM Sprachen WHERE ID = " + txtsprache2.Text;
                    OleDbDataReader rd5 = cmd.ExecuteReader();
                    while (rd5.Read())
                    {
                        txtsprache2.Text = Convert.ToString(rd5["Sprache"]);
                    }
                    rd5.Close();

                    cmd.CommandText = "SELECT Datum FROM Erscheinungsdatum WHERE ID = " + txtdatum2.Text;
                    OleDbDataReader rd6 = cmd.ExecuteReader();
                    while (rd6.Read())
                    {
                        txtdatum2.Text = Convert.ToString(rd6["Datum"]);
                    }
                    rd6.Close();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }

            finally
            {
                con.Close();
            }
        }

Wie man sieht, werden die Ergebnisse immer in Textboxen geschrieben. Mehrfach-Ergebnisse wurden bisher auch noch nicht ausgefiltert bzw. behandelt, aber das ist im Moment nicht das Problem.

Erst mal geht es mir wirklich nur darum, ob man den langen Code vllt. irgendwie vereinfachen kann!? Diese bzw. ähnliche Abfragen werden bei verschiedenen Buttonklicks ausgelöst. Also kann man die doch sicherlich irgendwie vereinfachen, als ständig neu zu schreiben bzw. zu kopieren, oder?

Über Ideen und Vorschläge würde ich mich sehr freuen!
 
Erst mal geht es mir wirklich nur darum, ob man den langen Code vllt. irgendwie vereinfachen kann!? Diese bzw. ähnliche Abfragen werden bei verschiedenen Buttonklicks ausgelöst. Also kann man die doch sicherlich irgendwie vereinfachen, als ständig neu zu schreiben bzw. zu kopieren, oder?!

Nunja, da das ganze an mehreren Stellen ausgegeben wird, kannst du den ganzen Block in eine seperate Funktion auslagern und diese mit verschiedenen Parametern von den Button_Clicks aus aufrufen. Somit hast du dir das lästige Copy/Paste bzw. den doppelt und dreifachen Code schonmal gespart.

Zu deinen Commands und dem ganzen kann ich dir leider auch keine bessere Methode liefern.

Grüße
Hale
 
Zurück