Hallo Mario,
da sitzt Du einem Mißverständnis auf.
Eine SQL Abfrage braucht keine Spaltenbezeichnungen und eindeutig müssen sie schon mal gar nicht sein.
Und ein Bezug zu einer Tabelle besteht in einer Abfrage ebenfalls nicht mehr.
Alle DataAdapter verwenden für die Zuordnung der Abfrage(n) die
TableMappings-Eigenschaft,
worüber die DataTable(s) durchnummeriert einen anderen Namen erhalten.
Jedes DataTableMapping hat wiederum eine
ColumnMappings-Eigenschaft
worüber die DataColumns ihren Namen erhalten.
Hat man diese Eigenschaften nicht explizit festgelegt (und ist MissingMappingAction entsprechend gesetzt)
ermitteln die DataAdapter die Informationen aus der SchemaTable der Abfrage. Siehe auch:
DataAdapter DataTable- und DataColumn-Zuordnungen (ADO.NET)
Spaltennamen (DataColumn) mit einem "." sollte man tunlichst vermeiden, da Punkte
auch als Trenner bei der Datenbindung uam. verwendet wird.
Und da fällt gelegentlich schon mal was auf die Nase ;-(
Wobei der SQL Server Provider relativ
detaillierte Informationen bei AddWithKey liefert
(tun aber längst nicht alle Provider).
Soweit zur Behandlung durch ADO.NET.
Sinvoller wäre in Deinem Falle zwei DataTAble zu verwenden, anstatt mit einem (LEFT) JOIN
duplizierte Informationen über alle Zeilen mitzuschleppen. Das erhöht nur die Datenmenge.
So wäre denkbar alle Warengruppen (ich gehe davon aus es gibt nur einige wenige) zusammen mit dem Artikel Abzurufen
SELECT TOP (10) PKArtikel, dbArtikel.Artikelnummer, dbArtikel.Bezeichnung, dbArtikel.VkPreisBrutto, dbArtikel.PKWarenGruppen
FROM dbArtikel
ORDER BY PKArtikel; -- TOP ohne ORDER BY tut man nicht!
SELECT PKWarenGruppen, Warengruppe, Bezeichnung
FROM dbWarengruppen;
(das geht auch in einer Abfrrage) Oder wenn Du es genauer haben willst:
-- die eingeschränkte Version
SELECT PKWarenGruppen, Warengruppe, Bezeichnung
FROM dbWarengruppen
WHERE PKWarengruppen IN (SELECT TOP (10)
dbArtikel.PKWarenGruppen
FROM dbArtikel
WHERE dbArtikel.PKWarenGruppen IS NOT NULL
ORDER BY dbArtikel.PKArtikel);
Wenn Du ein DataSet damit füllst hast Du zwei DataTable, die über eine DataRelation
in Beziehung setzen kannst. Das kann auch zur Integritätsprüfung verwendet werden,
wenn man einen Fremdschlüssel draus macht, siehe
Einführung in DataRelation-Objekte
Wenn man davon ausgehen kann, dass sich die Warengruppen nur selten ändern,
kannst Du die Warengruppen einmalig abrufen und später immer nur die angefragten Artikel.
Gruß Elmar