Daten abfragen



  • Hallo zusammen,

    ich bin relativ neu in der C#-Datenbankprogrammierung (ADO.Net) und hänge gerade an einem wohl einfachen Problem.

    Ich habe eine einfach Datenbank mit ca. 10 Tabellen. Für zwei dieser Tabellen habe ich jeweils ein DataGridView auf meine Form platziert, mit deren Hilfe ich mir die Informationen zweier DB-Tabellen anzeigen lassen möchte.

    Bsp.:

    Tabelle_1 soll von DataGridView_1 angezeigt werden
    Tabelle_2 soll von DataGridView_2 angezeigt werden

    etc.

    Nun habe ich dazu den VS2005-Assistenten genutzt, der mir auf einfachem Weg die Daten aus der DB holt und sie dann im DataGridView anzeigt. Diesen Assistenten konnte ich von der DataGridView-Komponente über den Eintrag "Datenquelle auswählen->Projektdatenquelle hinzufügen" starten.

    Der Assisten hat mir dementsprechend auch einige Komponenten angelegt (DataSet, BindingSource, TableAdapter...), die für die gewünschte Datenverarbeitung benötigt werden.

    Mein Problem ist nun, dass ich nicht richtig weiß, wie ich mit diesen Komponenten nun weiterarbeiten soll. Ich möchte z.B. eine Abfrage druchführen, die mir alle Auftragsdaten von Tabelle_1 zurückliefert. Dazu muss ich ja nicht extra auf die DB zugreifen, da ich ja schon eine Kopie der Daten über die SW-Komponenten zur Verfügung habe, oder??

    Würdet ihr generell die Nutzung dieses Assistenten empfehlen, oder sollte man eher alles selbst zu Fuß umsetzen? An welche Komponente würde ich jetzt meine Abfrage stellen? An das DataSet?? Und wie?

    In welche Komponente packe ich dann die Ergebnismenge, damit ich mit den Ergenissen arbeiten kann??

    Vielen Dank für eure Hilfe
    Gruß



  • Pack mal ein DataView dazwischen. (Die DataSource Deines Grids an das DataView binden und das dem Grid als DataSource die DataView). Dann kannst Du in der View die Daten selectieren und erhälst eine angepasste "Ansicht" der Daten.



  • Die Ansicht ist eigentlich so ok. Falls ich dann man eine selektive Anzeige anbieten möchte, dann ist deine Lösung bestimmt gut. Was ich aber versucht ist, die Datenmenge, die ich durch den Assistenten bereitgestellt bekommen habe, soweit zu verkleinern, dass ich mit diesen Daten arbeiten kann.

    Zur Laufzeit (Zeitpunkt bestimmt der Benutzer) soll dann die Abfrage ausgeführt werden, die mir eine Ergebnismenge liefert, mit der ich weitere Programmschritte ausführen kann.

    z.B.:

    //1.tes Element ist z.B. die Tabellen-ID
    if(ErgebnisSet.Values[0]==5)

    etc.

    Ich weiß nur nicht, wie und an welche automatisch erstellte Komponente ich diese Abfrage stellen soll, und ind welches Objekt ich mir die ergebnisse liefern lassen soll!



  • Kommt darauf an, wie Du mit den Daten weiter arbeiten willst. Wenn Du die Daten nicht darstellen willst sondern programmatisch weiterverarbeiten musst, kannst Du Dich in VS2005 durch die ensprechende DataTable im Dataset hangeln und mußt entsprechend umkopieren, sowas wie foreach(DataRow row in myDataSet.Tables["myTablename"].Rows) {}. Wenn Du VS2008 geht das wesentlich einfacher mit Linq to DataSet.



  • Es klingt jetzt etwas banal, aber was du machen kannst siehst du im Klassendiagramm 😉 (ich hoffe das gibt es bei VS2005 schon).

    Angenommen du hast eine Tabelle "tabelle" mit 2 Spalten und benutzt nun den besagten Assistenten des Controls. Dann hast du ein tabelleTableAdapter-Objekt zur Verfügung. Laut Klassendiagramm besitzt ein Objekt dieser Klasse eine Methode namens "Insert".

    Also könntest du jetzt mit tabelleTableAdapater.Insert(Spaltenwert1, Spaltenwert2) eine neue Reihe in diese Tabelle einfügen 🙂

    Um ADO zu verstehen sollte man glaube ich nicht mit dem generierten Code anfangen.


Log in to reply