好的,所以这需要一些解释。
我正在尝试做的过程是从 SQL 中的表函数中获取数据,然后用返回的值填充数据集。然后,我必须再运行两次此查询来查询备用号码表。然后添加到与先前查询相同的表中。这需要尽可能快,所以我目前使用 adapter.fill 填充数据集,然后使用 dataset.merge 将它们全部放入一个表中。
问题是查询会返回重复的重复项,这会浪费时间和空间,因此我将第 3 列(part_ID)作为停止重复项的主键。
当它与 .merge 一起运行时,它会在重复的第一个实例中退出,并且不会继续填充。
下面的代码是我用来解决这个问题的,我只是想知道是否有更好更优雅的解决方案。
com = New SqlCommand(sqlPN, myConnect)
adapter.SelectCommand = com
adapter.Fill(temp, "Table(0)")
Dim data As New DataSet
data = temp
temp.Tables(0).Columns(3).Unique = True
firstSet = temp.Tables(0).Rows.Count
temp.AcceptChanges()
If temp.Tables(0).Rows.Count < maxRecords Then
Dim sqlAlt As String = "select Top " & (maxRecords + 10 - temp.Tables(0).Rows.Count) & " * from getAltEnquiry('" & tbSearchFor.Text & "') ORDER BY spn_partnumber"
adapter.SelectCommand.CommandText = sqlAlt
adapter.FillLoadOption = LoadOption.OverwriteChanges
adapter.Fill(temp, "Table(1)")
For i = 0 To temp.Tables(1).Rows.Count - 1
Try
temp.Tables(0).ImportRow(temp.Tables(1).Rows(i))
Catch e As Exception
End Try
Next
End If
If temp.Tables(0).Rows.Count < maxRecords Then
Dim sqlSuPN As String = "select Top " & (maxRecords + 5 - temp.Tables(0).Rows.Count) & " * from getSuPNEnquiry('" & tbSearchFor.Text & "') ORDER BY spn_partnumber"
adapter.SelectCommand.CommandText = sqlSuPN
adapter.Fill(temp, "Table(2)")
For i = 0 To temp.Tables(2).Rows.Count - 1
Try
temp.Tables(0).ImportRow(temp.Tables(2).Rows(i))
Catch e As Exception
End Try
Next
End If</code>
感谢您的任何帮助或建议^__^