将数据集保存在内存或多个SQL查询中

时间:2011-04-19 19:48:32

标签: sql vb.net loops

我需要遍历gridview来查找与不同表中的项匹配的记录(在SQL中)。是循环gridview并在每个循环上调用SQL过程以查找匹配记录的最佳方法吗?或者我应该将整个sql db拉入数据表并在gridview循环中查询数据集吗?

'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

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

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

1)从SqlDataReadermanufacturernamemodelName

订购的数据库中创建serialNo

2)以相同的方式订购gridview

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

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