想象一下,我们在数据库中有两个表,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
,我能够为用户阅读(使用{{ 1}}),但无法读取角色(使用reader["id"]
)。
属性reader["role.id"]
返回12,表示已读取所有必填字段(FieldCount
包含6个字段,user
也是如此。
在这种情况下,我是否有可能按名称读取列?或者以唯一的方式使用两个查询或SQL'作为'运算符?
答案 0 :(得分:11)
您可以始终明确选择列并将其别名:
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
然后使用reader["user_id"]
和reader["role_id"]
选择它们。
答案 1 :(得分:1)
唯一可行的方法是在SQL查询中使用AS
以确保列名称/别名是唯一的...否则您将按索引(0/1/2等)访问字段。而不是名字。
答案 2 :(得分:1)
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"];
答案 3 :(得分:1)
当然,您应该按名称选择列,但您需要这样做:
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
使用,...,我想选择两个表的剩余列。
最后,使用reader [“uid”],reader [“rid”]等。