Stellen Sie sich vor, wir haben zwei Tabellen in der Datenbank, user
(FK id_role) und role
(PK-Rolle). Wir müssen Informationen über Benutzer und seine Privilegien lesen.Abrufen von Werten aus verbundenen Tabellen mit SqlDataReader
Ich verwende die folgende SQL-Anweisung Abfrage auszuführen:
SELECT *
FROM [user]
INNER JOIN role ON [user].id_role = role.id
WHERE login = @login
Nach der Ausführung, versuche ich Werte in Leser Indexer mit Zeichenfolge zu lesen: reader[string name]
.
Das Problem, das ich lösen müssen, ist Namen zu wiederholen: beide user
und role
enthalten, zum Beispiel das Feld id
, die ich in der Lage bin für Benutzer zu lesen (mit reader["id"]
), aber nicht in der Lage für Rolle zu lesen (mit reader["role.id"]
).
Die Eigenschaft FieldCount
12 zurückkehrt, was bedeutet, dass alle erforderlichen Felder gelesen wurden (user
enthält 6 Felder, so auch role
).
Kann ich Spalten in diesem Fall namentlich lesen? Oder mit zwei Abfragen oder SQL 'als' Operator auf die einzige Art und Weise?
Sie müssen Spalte Aliase in Ihrer 'SELECT' definieren - oder Ordnungsposition lesen (' Reader [index]) ' - aber das ist natürlich anfällig für andere Probleme (wie 'Benutzer' Tabelle bekommt eine weitere Eigenschaft und dann sind Ihre Bestellungen alle um 1) - und diese könnten gelöst werden, indem Sie nicht 'SELECT *' - aber explizit alle Spalten auflisten Sie brauchen wirklich und wollen aus diesen beiden Tabellen wählen ... –
Natürlich ist das Lesen nach Position unbequem ein wenig ... Wahrscheinlich ist Aliase die Antwort. Aber ich bin verwirrt, warum Datenreader vor Spalten keinen Tabellennamen hinzufügt. – Eadel