2011-04-19 91 views
0

我需要遍历gridview才能找到与不​​同表中的项匹配的记录(SQL中)。是循环gridview并在每个循环中调用SQL过程以查找匹配记录的最佳方法?或者我应该将整个sql数据库拉到数据表中,并在我的gridview循环中查询数据集?将数据集保存在内存或多个SQL查询中

'find source ID based on make/model/serial No combination. 
     Dim cSource As New clsSource() 
     Dim ds As DataSet = cSource.GetSources() 
     Dim found As Boolean = False 

     'populate db datatables 
     Dim dt As DataTable = ds.Tables(0) 
     Dim rows As Integer = gwResults.Rows.Count() 
     For Each row As GridViewRow In gwResults.Rows 
      'move through rows and check data in each row against the dataset 
      '1 - make 
      For Each dataRow As DataRow In dt.Rows 
       found = False 
       If dataRow("manufacturerName") = row.Cells(1).Text Then 
        If dataRow("modelName") = row.Cells(2).Text Then 
         If dataRow("serialNo") = row.Cells(3).Text Then 
          found = True 
         End If 
        End If 
       End If 

       'display results 
       If found Then 
        lblResults.Text += row.Cells(1).Text & "/" & row.Cells(2).Text & "/" & row.Cells(3).Text & " found" 
       Else 
        lblResults.Text += row.Cells(1).Text & "/" & row.Cells(2).Text & "/" & row.Cells(3).Text & " not found " 
       End If 

      Next 
     Next 

回答

1

我认为你需要定义“更好”。

如果您需要优化内存 - 然后循环和查询。哦,但是如果你正在写现代硬件,那么在这个级别上优化内存通常不是一个好主意(尽管如果你的网格有几十或几十万或几行,这可能不是真的)。

如果您需要优化时间,请运行单个查询并在内存中循环。

+0

也考虑优化'SQL'加载。多个查询可能比单个长时间运行的查询更重要。 – JNK 2011-04-19 19:54:13

+0

谢谢。我尝试了一个单一的查询 - 它约18K的记录,但我必须多次循环(对于每个网格视图行),需要一段时间才能完成,我试图优化时间。我即将编辑上面的帖子,请看看。 – 2011-04-19 19:56:15

+0

我是否正确地认为你试图匹配两个数据集中的记录?如果是这样,你有没有考虑过在SQL中进行连接? – 2011-04-20 12:43:55

0

gridview中的数据来自哪里?你应该做的是一个SQL连接。如果这是不可能的,例如GridView数据来自完全不同的来源,对于SQL结果集执行单个交叉循环要快得多。这假定有许多不同的值需要匹配,并且从GridView中的数据构建S​​QL select直接执行作业是不现实的。

1)创建由manufacturernamemodelName下令数据库的SqlDataReaderserialNo

2)订购的GridView同样的方式

3)在每个的第一个记录开始,在一个循环中,比较gridview中的当前值与数据读取器中的当前值进行比较。如果它们小于(之前)数据读取器中的当前数据,请向前移动网格视图指针。如果它们大于,则向前移动数据阅读器指针。如果它们是平等的,那么采取你需要的行动,并且(如果你想继续)向前移动gridview指针。继续,直到到达网格视图的末尾,并且数据阅读器中的最后一条记录大于网格视图中的最后一条记录。

这有最大数量的迭代等于两个集合和单个数据库查询中较大的一个。