3

データベースにuser(FK id_role)とrole(PK role)の2つのテーブルがあるとします。ユーザーとその特権に関する情報を読む必要があります。

次のSQLステートメントを使用してクエリを実行します。

SELECT * 
FROM [user] 
INNER JOIN role ON [user].id_role = role.id 
WHERE login = @login

実行後、文字列インデクサーを使用してリーダーで値を読み取ろうとしますreader[string name]

私が解決する必要のある問題は、名前を繰り返すことです。たとえば、フィールドuserを含みます。これは、ユーザー(を使用して)では読み取ることができますが、ロール(を使用して)では読み取ることができません。roleidreader["id"]reader["role.id"]

プロパティFieldCountは12を返します。これは、すべての必須フィールドが読み取られたことを意味します(user6つのフィールドが含まれているためrole)。

この場合、名前で列を読み取る可能性はありますか?または、2つのクエリまたはSQL'as'演算子を唯一の方法で使用しますか?

4

4 に答える 4

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"]

于 2012-04-08T18:47:57.523 に答える
1

唯一の堅牢な方法はAS、SQLクエリで使用して、列名/エイリアスが一意であることを確認することです。そうでない場合は、名前ではなくインデックス(0/1/2など)でフィールドにアクセスします。

于 2012-04-08T18:48:24.747 に答える
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"];
于 2012-04-08T18:48:37.110 に答える
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"] などを使用します。

于 2012-04-08T18:49:13.990 に答える