0

以下にいくつかのデータベーステーブルがあります。各ユーザーを datagridview に表示し、関連する 'Pass' フィールド値を表示したいと考えています。

現在のクエリは 1. ユーザー テーブルからすべてのユーザーをロードします 2. ユーザーを datagridview に追加します 3. datagridview をループします - ユーザー クエリごとに i) ExamGeography、ii) ExamMath、iii) ExamSpanish

    foreach (DataGridViewRow dgvRow in resultsDataGridView.Rows)
    {
    dgvRow.Cells["geographyCol"].Value = 'query result from ExamGeography i.e. SELECT Pass FROM ExamGeography WHERE User=@User'
        dgvRow.Cells["mathCol"].Value = 'query result from ExamMath i.e. SELECT Pass FROM ExamMath    WHERE User=@User'
    // ...
    }

したがって、各ユーザーはデータベースに対して新しい呼び出しを行います。データベースへの呼び出しをできるだけ少なくする方が常に良いですか? 同じテーブルへの複数の呼び出しではなく? ベスト プラクティス/ベスト パフォーマンスと見なされるものは何ですか?

たとえば、クエリを 'SELECT Pass FROM ExamGeography' (WHERE 句を省略) にして、すべてのユーザーに返す必要がありますか?

User Table

User (PK) ----------- Member
User1                 Y
User2                 Y
User3                 N

ExamGeography Table

User (FK) ----------- Pass
User1                  Y
User2                  Y
User3                  Y

ExamMath Table

User (FK) ----------- Pass
User1                  N
User2                  Y
User3                  Y

ExamSpanish Table

User (FK) ----------- Pass
User1                  Y
User2                  N
User3                  N


DataGridView Display

Username   Geography     Math      Spanish
User1          Y           N           Y
User2          Y           Y           N
User3          Y           Y           N
4

1 に答える 1

1

はい、データベースから取得したデータをメモリに格納できると仮定すると、できるだけ少ない呼び出しを行うことを常にお勧めします。あなたの例の外観から、これは問題にはなりません。

データベースからすべてのデータを取得したら (これを行うにはストアド プロシージャを使用します)、結果を for ループで反復処理し、それらを新しいデータ グリッド ビューに配置して、Bob を叔父にします。

クエリは、次の行に沿ったものになるはずです。

SELECT *
FROM UserTable a
JOIN ExamGeographyTable b
    ON a.User = b.User
JOIN ExamMathTable c
    ON a.User = c.User
etc.
于 2012-02-07T17:48:11.140 に答える