簡體   English   中英

使用 SqlDataReader 從聯接表中獲取值

[英]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]

我需要解決的問題是重復名稱: userrole都包含,例如字段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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM