查询数据库 - 最佳实践

时间:2012-02-07 17:36:54

标签: c# datagridviewrow

下面有很多数据库表。我想在datagridview中显示每个用户及其相关的“Pass”字段值。

当前查询是 1.从User表中加载所有用户 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

1 个答案:

答案 0 :(得分:1)

是的,假设您从数据库中提取的数据可以存储在内存中,最好尽可能少地进行调用。从你的例子来看,这应该不是问题。

一旦从数据库中获取了所有数据(使用存储过程执行此操作),您可以在for循环中迭代结果,将它们放入新的数据网格视图中,Bob是您的叔叔。 / p>

您的查询应该最终成为这些内容:

SELECT *
FROM UserTable a
JOIN ExamGeographyTable b
    ON a.User = b.User
JOIN ExamMathTable c
    ON a.User = c.User
etc.