Хранение набора данных в памяти или нескольких запросов SQL - PullRequest
0 голосов
/ 19 апреля 2011

Мне нужно пройтись по сетке, чтобы найти записи, которые соответствуют элементам в другой таблице (в SQL).Является ли лучший метод для обхода gridview и вызова процедуры SQL в каждом цикле для поиска соответствующих записей?Или я должен вытащить всю базу данных sql в таблицу данных и запросить набор данных в моем цикле 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 ]

1 голос
/ 19 апреля 2011

Я думаю, вам нужно определить «лучше».

Если вам нужно оптимизировать для памяти - тогда цикл и запрос.Да, но если вы пишете для современного оборудования, оптимизация памяти на этом уровне, как правило, не очень хорошая идея (хотя, если ваша сетка имеет десятки или сотни тысяч или строк, это может быть не так).

Если вам нужно оптимизировать время, запустите один запрос и выполните цикл в памяти.

0 голосов
/ 20 апреля 2011

Откуда поступают данные в виде сетки? То, что вы должны делать, это SQL-соединение. Если это невозможно, например, данные gridview взяты из совершенно другого источника, было бы намного быстрее выполнить один цикл перемежения для набора результатов SQL. Это предполагает, что существует множество различных значений, которые необходимо сопоставить, и нецелесообразно создавать SQL-выбор из данных в вашем сеточном представлении, который бы выполнял работу напрямую.

1) Создать SqlDataReader из базы данных, упорядоченной по manufacturername, modelName, serialNo

2) Заказать сетку так же

3) Начиная с первой записи каждого в цикле, сравнивайте текущие значения в виде сетки с текущими значениями из считывателя данных. Если они меньше (до) текущих данных в считывателе данных, переместите указатель вида сетки вперед. Если они больше чем, переместите указатель чтения данных вперед. Если они равны, выполните необходимое действие и (если хотите продолжать движение) переместите указатель вида сетки вперед. Продолжайте, пока не дойдете до конца вида сетки, и последняя запись в считывателе данных будет больше, чем последняя запись в виде сетки.

Максимальное число итераций равно максимальному из двух наборов и одному запросу к базе данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...