Ich bin ein wenig verwirrt darüber, wie man Daten aus einer Zugangsdatenbank bekommt. Ist es richtig, es zuerst in einer Liste zu sammeln, dann diese Daten von deiner Liste zu bekommen ODER es ist in Ordnung, es direkt in deine Datenbank zu bekommen?
Meine Codes funktionieren einwandfrei, aber ich möchte wissen, ob es einen besseren Weg gibt, das zu tun? :
%Vor%* Ich bekomme meine Datensätze direkt aus einer Datenbank und zeige sie dann in einer Listbox an.
Eine Sache, die wie ein wunde Daumen herausragt, ist die SQLInjection und die Verwendung von parametrisierten Abfragen, zB:
%Vor%Was Sie tun, ist vollkommen akzeptabel, obwohl Sie normalerweise besser eine SQL-Datenbank verwenden sollten.
Bearbeiten: Hier ist, wie Sie Ihre Geschäftslogik von der GUI trennen:
%Vor%GUI
%Vor%Ich würde sagen, die Antwort ist "Ja" für beide.
Was Sie jetzt tun, ist in einfachen Fällen durchaus akzeptabel. Sei dir bewusst, dass es nicht sehr gut "skaliert". Das heißt, das Laden von 10 oder 20 Artikeln ist in Ordnung. Aber was passiert, wenn es 10 Tausend oder eine Million wird?
In diesem Fall möchten Sie eine MVC-Architektur (Model-View-Controller) verwenden. Das ist ein Thema für sich, aber im Grunde entkoppeln Sie die Listbox (die "Ansicht") von den Daten (das "Modell").
Siehe diese Seite für eine C # -zentrische MVC-Diskussion
Zwischen dem, was Sie gerade tun, und einer voll entwickelten MVC-Architektur möchten Sie vielleicht einfach so vorgehen, wie Sie es vorschlagen: Laden Sie zuerst die Liste und fügen Sie sie dann dem Listenfeld hinzu. Das bringt Ihnen nichts, wenn Sie es nur einmal laden, aber wenn die Liste "überall" geladen ist, können Sie den IO Overhead der Datenbank jedes Mal speichern, indem Sie nur einmal darauf zugreifen.
Die Tatsache, dass Sie die Frage gestellt haben, zeigt an, dass Sie auf dem richtigen Weg sind.
Obwohl Ihr Code ohne Probleme funktioniert, empfehle ich Ihnen, eine Ausnahmebehandlung durchzuführen, wie in dieses Beispiel , da sowohl OleDbConnection.Open()
als auch OleDbCommand.ExecuteReader()
ein InvalidOperationException
werfen können.
Es ist auch üblich, die Verbindung mit einer using
Anweisung zu verbinden, also in Das Ende connection.close()
wird automatisch aufgerufen, aber dies ist nur eine persönliche Vorliebe.
Sie können Ihre Datenzugriffsfunktionen möglicherweise in verschiedene Klassen aufteilen oder generische Funktionen zum Abrufen von Datensätzen erstellen.