Laden...

kleines Select/Where Problem

Erstellt von DeerHunter007 vor 12 Jahren Letzter Beitrag vor 12 Jahren 2.566 Views
D
DeerHunter007 Themenstarter:in
9 Beiträge seit 2012
vor 12 Jahren
kleines Select/Where Problem

verwendetes Datenbanksystem: SqlCe Compact 3.5

Hi,

ich hab ein DataSet ds mit nem Table dt.
In dt befindet sich (unter anderem) die Spalte nation, die je nach Datensatz "GER", "ENG", "USA" etc. enthält.
Ich will nun die Datensätze so selektieren, dass ich für jedes Land einen Bericht erstellen kann.
Mit

        DataRow[] nations = dt.Select("nation = 'GER'");  

klappt das schon mal einwandfrei, aber halt nur für ein Land.
Ich suche also nach einer Variablen, die mir alle Länder einliest, also z.B. ein List<>, welches ich dann abarbeiten kann - nur wie?

Ich hab schon alles mögliche gegoogelt und auch schon in div. Foren nachgeschaut, konnte aber nichts brauchbares finden (vielleicht ja auch nur blind...).

48 Beiträge seit 2010
vor 12 Jahren

Ich habe Dich so verstanden, dass Du von Deinem DataSet erst einmal wissen möchtest welche verschiedenen Länder gibt es. Das kann man mit SQL so machen:


SELECT Personen.Land
FROM Personen
GROUP BY Personen.Land;

und für C# gibt es hier ein Beispiel:
Group Klausel

Ich befürchte nur, dass Dir einer der Moderatoren eine 1.1.1. Exception werfen wird. Viel Glück

D
DeerHunter007 Themenstarter:in
9 Beiträge seit 2012
vor 12 Jahren

Danke für den Tipp, scheint wohl das zu sein, was ich gesucht habe.
Allerdings bringt er mir folgende Fehlermeldung:

DataSet ds = new DataSet();
adp.Fill(ds);

DataTable dt = ds.Tables["Table"];
var nationNames =
from n in dt
group n by n.nation.Last() into g
orderby g.Key
select g;

Es konnte keine Implementierung des Abfragemusters für den Quelltyp "System.Data.DataTable" gefunden werden. "GroupBy" wurde nicht gefunden.

48 Beiträge seit 2010
vor 12 Jahren

Du brauchst noch .AsEnumerable().

Das wird so nichts, weil Du einfach eines der Beispiele kopiert hast ohne es nachvollzogen zu haben. In dem Beispiel werden Studenten mit gleichem Nachnamen gruppiert. Davon finden sich noch Fragmente in deinem Code... 🙁

F
10.010 Beiträge seit 2004
vor 12 Jahren

Nicht nur das, es ist selten sinnvoll die Arbeit der Datenbank dadurch zu ersetzen indem man die gesamte Tabelle in eine DataTable liest und dann von Hand verarbeitet.

48 Beiträge seit 2010
vor 12 Jahren

Ich kann das gut nachvollziehen, man programmiert ein bisschen C#, dann braucht man eine Datenbank und plötzlich steht man vor SQL Queries, SqlCeDataAdapter, DataTable, DataSet, Linq und sieht den Wald vor lauter Bäumen nicht.

Hier noch eine sehr schöne Ressource www.db-class.org Zum Hintergrund: Stanford hat im letzten Jahr diverse Vorlesungen online gehalten. Darunter dieser Datenbankkurs - ist m.E. sehenswert wenn man selbst noch keine derartige Veranstaltung besucht hat.

D
DeerHunter007 Themenstarter:in
9 Beiträge seit 2012
vor 12 Jahren

Nochmals vielen Dank.

Sehr nützlich www.db-class.org.

Gelöst habe ich es mit ner SQL Abfrage, naja eigentlich 2.

  1. SELECT nation FROM Orders GROUP BY nation
    Schreibt nur die einzelnen Länder in dtNation

  2. SELECT * FROM Orders WHERE nation = '" + dtNation.Rows[0][0] + "'
    Schreibt die Daten pro Land.

Kann man bestimmt noch eleganter machen, aber es funzt.

48 Beiträge seit 2010
vor 12 Jahren

Sieht soweit gut aus.

Tipp: Schau dir mal den StringBuilder an, dann kannst Du die die Literal Concatenation (+) sparen.

5.742 Beiträge seit 2007
vor 12 Jahren

Tipp: Schau dir mal den StringBuilder an, dann kannst Du die die Literal Concatenation (+) sparen.

Dann von mir der Verweis auf: [Artikelserie] SQL: Parameter von Befehlen