【发布时间】:2012-04-08 18:41:27
【问题描述】:
假设我们在数据库中有两个表,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中定义列别名 - 或按序号位置 (Reader[index]) 读取 - 但这当然容易出现其他问题(例如User表获得了另一个属性然后您的订单全部取消 1) - 这些可以通过不使用SELECT *来解决 - 但明确列出您真正需要并希望从这两个表中选择的所有列... -
当然,按位置阅读有点不舒服......可能别名就是答案。但我很困惑为什么 datareader 不在列之前添加表名。
标签: c# .net sql-server ado.net sqldatareader