好吧,這需要做一些解釋。用主鍵填充數據表的SQLDataAdapter會產生錯誤並退出sub
我想要做的過程是從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>
感謝任何幫助或建議^ __^
哦哇這聽起來很棒我現在會嘗試一下並回復你,我原本以爲我可以編寫一個排序方法,但第一個和第二個查詢需要引用不同的表。 –
好吧,這幫助了很多,我將temp數據集重命名爲數據表,然後將第3列聲明爲主鍵。就像你說的那樣,現在正在修改表格!__^ –
好極了!我很高興這爲你工作! – ShellyFM