Laden...

Sqlite-Datenabfrage im Datagrid anzeigen

Erstellt von Nexmo vor 2 Jahren Letzter Beitrag vor 2 Jahren 440 Views
N
Nexmo Themenstarter:in
36 Beiträge seit 2021
vor 2 Jahren
Sqlite-Datenabfrage im Datagrid anzeigen

Guten Morgen zusammen.

leider bin ich etwas am verzweifeln. Folgendes liegt vor:
ich habe eine embedded Sqlite DB. In dieser DB sind mehrere Tabellen.
Über einen Abfrage String hole ich mir nun die entsprechenden zusammenhängenden Daten aus dieser Tabelle.


string Abfrage = "Select p.Vorname, p.Nachname, p.Geburtsdatum, a.Straße, a.Hausnummer, a.Postleitzahl, a.Ort, a.Land, at.Typ_Name, t.Nummer, tt.Typ_Art, e.Mailadresse, et.Typ_Art " +  
                             "From Person p JOIN Person_Adresse pa ON p.ID_Person = pa.ID_Person " +
                             "Join Adresse a ON pa.ID_Adresse = a.ID_Adresse " +
                             "Join Adress_Typ at ON pa.ID_Adress_Typ = at.ID_Adress_Typ " +
                             "JOIN EMail e ON p.ID_Person = e.ID_Person " +
                             "JOIN EMail_Typ et ON e.ID_Email_Typ = et.ID_Email_Typ " +
                             "JOIN Telefon t ON p.ID_Person = t.ID_Person " +
                             "JOIN Telefon_Typ tt ON t.ID_Telefon_Typ = tt.ID_Telefon_Typ ";

Jetzt ist nur meine Frage, wie bekomme ich die erhaltenen Daten in meinem GridView angezeigt??

bei SQL-Server und MySQL würde ich jetzt mit einem SqlDataAdapter arbeiten und das dann in eine DataTable setzen.
und damit dann mein Datagrid füllen.

leider bietet mir das Sqlite diese option nicht. (aus Recherchen sollte dies aber wohl in früheren zeiten(bis 2015 etwa) noch möglich gewesen sein.

dann hat mir jemand gesagt, ich müsste mir Bindings arbeiten.

da steh ich aber gerade etwas auf dem schlauch wie das denn aussehen soll, und wie ich da was an wen binden muss.

klar ist mir, dass ich diese Property-Bindings im Xaml setzen muss, nur fehlt mir da grad der Ansatz zum Umsetzen dazu, und wie ich das im Code-Behind dann lösen kann.

danke schonmal für eure Tipps und Anregungen.

P
441 Beiträge seit 2014
vor 2 Jahren

Erstelle dir eine Klasse, die der Struktur deines Abfrageergebnisses gleicht. Lese die Daten in eine Liste dieser Klasse, diese kannst du im DataGrid anzeigen.

N
Nexmo Themenstarter:in
36 Beiträge seit 2021
vor 2 Jahren

Also benötige ich sozusagen eine Referenzklasse mit meinen Angaben, die ich gerne haben möchte.
Erstelle dann also eine neue Liste, von der Klasse in der while(reader.Read()) schleife und befülle diesen dann mit den Ergebnissen aus der Abfrage.
Sehe ich das so Richtig?

Weil das stelle ich mir schwierig vor. ich habe ja nicht nur einen Datensatz in der Datenbank.
das sind ja X-Datensätze.
wenn ich jetzt für jede Abfrage eine Liste erzeuge, dann habe ich ja dann X-Listen = X der Menge an Datensätzen.

4.938 Beiträge seit 2008
vor 2 Jahren

Auch SQLite bietet entsprechende Datenbankzugriffsklassen an (SQLiteConnection, SQLiteCommand), s.a. C# SQLite.

Entsprechend der [Artikel] Drei-Schichten-Architektur sollte dieser Code dann in der Datenzugriffsschicht (DAL) sein (Stichwörter: Repository, Unit of Work, s. How to implement Repository & Unit of Work design patterns in .NET Core with practical examples [Part 1]).

Und von der UI aus bindest du dann über die ViewModel-Klasse diese Daten, s. [Artikel] MVVM und DataBinding.

F
10.010 Beiträge seit 2004
vor 2 Jahren

Nein musst du nicht, und deine Recherchen waren wohl auch von falschen Angaben gekrönt.
Wenn du per Nuget entweder System.Data.SQLite oder Microsoft.Data.SQLite installierst hast du im Namespace auch einen SQLiteDataAdapter

Ganz abgesehen davon, nein, wenn du Klassen und einen ORM benutzt erstellst du eine Liste mit allen Daten der Abfrage, nicht mehrere listen

N
Nexmo Themenstarter:in
36 Beiträge seit 2021
vor 2 Jahren

ich vermute du hast mein Problem nicht ganz verstanden.

ich habe bereits eine fertige Datenbank im Databasename.db style.

diese wird nicht nochmal im Programm selbst erzeugt, sondern wird fertig eingebunden.

Nun habe ich dort mehrere Tabellen drin, die über PK und FK miteinander verbunden sind.

Der von mir gegeben Abfragestring holt jetzt aus diesen Tabellen alle Daten, die zusammenhängen.
und das für jeden Datensatz, der in der Tabelle "Person" aufgelistet ist.

nur wie kann ich jetzt diese Daten mir auch wieder anzeigen lassen?

Da Sqlite ja nicht mehr über den Dataadapter verfügt, welchen ich dann als DataSource an ein Datagrid binden kann( ähnlich wie bei SQL-Server oder MySQL).

N
Nexmo Themenstarter:in
36 Beiträge seit 2021
vor 2 Jahren

Nein musst du nicht, und deine Recherchen waren wohl auch von falschen Angaben gekrönt.
Wenn du per Nuget entweder System.Data.SQLite oder Microsoft.Data.SQLite installierst hast du im Namespace auch einen SQLiteDataAdapter

Ganz abgesehen davon, nein, wenn du Klassen und einen ORM benutzt erstellst du eine Liste mit allen Daten der Abfrage, nicht mehrere listen

leider habe ich in WPF unter Core 5.0 keine SqliteDataAdapter.

ich habe nur einen SqliteDataReader.

16.830 Beiträge seit 2008
vor 2 Jahren

Der DataAdapter ist technologisch eher veraltet, daher wurde er nicht implementiert.
Microsoft.Data.Sqlite: No SqliteDataAdapter

The way to go ist der https://docs.microsoft.com/en-us/dotnet/api/microsoft.data.sqlite.sqlitedatareader?view=msdata-sqlite-5.0.0

Ansonsten passen die Aussagen der Vorredner; glaube auch, dass diese sehr wohl das/Dein Problem verstanden haben.

N
Nexmo Themenstarter:in
36 Beiträge seit 2021
vor 2 Jahren

muss mich tatsächlich bei allen Entschuldigen.
über eine klasse mit meinen Ergebnissen, und daraus dann eine Liste ziehen hat es funktioniert.

bitte seht es mir nach, ich stehe noch recht am Anfang und versuche manches komplizierter anzugehen, als es tatsächlich ist.

vllt hat ja noch einer eine Idee, wie ich nun mehrfach ergebnisse rausbekomme.

ich hab z.b. pro Person mehrere Email-adressen und/oder mehrere Telefonnummern. oder aber auch mehrere adressen / person( zweitwohnsitz innland/ zweitwohnsitz ausland, rechnungsadresse, ect.

gibt es da eine möglichkeit nur diese Columns in eine Combobox anzeigen zu lassen??

16.830 Beiträge seit 2008
vor 2 Jahren

Musst in Deinem Query beachten, zB über GROUP BY

N
Nexmo Themenstarter:in
36 Beiträge seit 2021
vor 2 Jahren

bei einem Group by, kann ich ja nur nach einer Spalte gehen.

möchte aber gerne Zeitgleich alle Spalten, wo ich mehrere ergebnisse zu 1 Person habe, in einer Combobox anzeigen lassen.

ist das überhaupt möglich?

16.830 Beiträge seit 2008
vor 2 Jahren

Nein, Du kannst mit Group By auch mehrere Spalten beachten. Hab Dir das nich umsonst gesagt.
Gibt aber auch andere Wege, zB Sub-Selects etc.

N
Nexmo Themenstarter:in
36 Beiträge seit 2021
vor 2 Jahren

Ok, super. dann werde ich das mal ausprobieren.