[英]Get values from joined tables using SqlDataReader
假設我們在數據庫中有兩個表, user
(FK id_role)和role
(PK 角色)。 我們需要讀取有關用戶及其權限的信息。
我使用以下 SQL 語句執行查詢:
SELECT *
FROM [user]
INNER JOIN role ON [user].id_role = role.id
WHERE login = @login
執行后,我嘗試使用字符串索引器讀取讀取器中的值: reader[string name]
。
我需要解決的問題是重復名稱: user
和role
都包含,例如字段id
,我可以為用戶讀取(使用reader["id"]
),但不能為角色讀取(使用reader["role.id"]
)。
屬性FieldCount
返回 12,這意味着所有必填字段都已讀取( user
包含 6 個字段, role
也是如此)。
在這種情況下,我可以按名稱閱讀列嗎? 或者以唯一的方式使用兩個查詢或 SQL 'as' 運算符?
您總是可以明確地 select 列並為它們起別名:
SELECT user.id AS user_id, user.*, role.id AS role_id, role.*
FROM [user]
INNER JOIN role ON [user].id_role = role.id
WHERE login = @login
然后 select 他們與reader["user_id"]
和reader["role_id"]
。
唯一可靠的方法是在 SQL 查詢中使用AS
來確保您的列名/別名是唯一的……否則您將通過索引(0 / 1 / 2 等)而不是名稱訪問字段。
SELECT role.id as RoleId, user.id as UserId
FROM [user]
INNER JOIN role ON [user].id_role = role.id
WHERE login = @login
使用AS
reader["RoleId"];
當然,你應該按名稱 select 列,但你需要這樣做:
SELECT u.id as uid, r.id as rid, ... , FROM [user] u INNER JOIN role r ON [user].id_role = role.id WHERE login = @login
使用, ... ,我想要 select 這兩個表的剩余列。
最后,使用 reader["uid"]、reader["rid"] 等。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.