2011-04-19 78 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指針。繼續,直到到達網格視圖的末尾,並且數據閱讀器中的最後一條記錄大於網格視圖中的最後一條記錄。

這有最大數量的迭代等於兩個集合和單個數據庫查詢中較大的一個。