下面有很多数据库表。我想在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
答案 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.