0

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

当前查询是 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 回答