我有這個大的SQL命令,通常會返回20 000到100 000行的數據。 但是,只要我調用executeMyQuery函數,程序就會掛起幾秒鐘,具體取決於返回的大小。如何在執行大的SQLCommand時顯示進度條VB.Net
我只返回一列。
如何在運行此命令時顯示進度欄?
在一個線程或東西也許(我有一個線程沒有經驗)
這裏是我的代碼(該參數從3個不同的combobox.selectedItem發送):
Public Function executeMyQuery(dbname As String, colname As String, tblname As String)
Try
ListBox1.Items.Clear()
If Not String.IsNullOrWhiteSpace(connString) Then
Using cn As SqlConnection = New SqlConnection(connString)
cn.Open()
Using cmd As SqlCommand = New SqlCommand()
cmd.Connection = cn
Dim qry As String
qry = String.Format("select distinct [{0}] from {1}.dbo.{2} where [{0}] is not null", colname, dbname, tblname)
cmd.CommandText = qry
cmd.CommandTimeout = 0
Dim count As Integer
Using myReader As SqlDataReader = cmd.ExecuteReader()
While (myReader.Read())
count += 1
ListBox1.Items.Add(count.ToString & ". " & myReader.GetString(0))
End While
End Using
End Using
End Using
End If
cn.Close()
Catch ex As Exception
MsgBox("Error Occured : " & ex.Message)
cn.Close()
End
End Function
'Reader'將返回第一行,當您通過調用'myReader.Read'來枚舉行時,您需要增加一個進度條。 SQL部分已經不一樣了。但是,如果希望對數據進行讀取時用戶可以看到進度條的更改,則需要在後臺線程中運行'executeMyQuery',以使主GUI線程空閒,以在觸發時更新進度欄通過增加進度來改變事件。 – Jodrell
謝謝,但我不知道如何使用線程...嘗試了他們,並得到我的控件不屬於線程等錯誤 –
你不知道有多少行將返回,直到查詢完成,所以你贏了'無法展示實際進展。您可以顯示估計的進度或只是指示活動。 – Jodrell