星期二, 1月 13, 2009

SqlDependency的設定方式

Private Delegate Sub UICallBack()
Private changeCnt As Integer


Private Sub getdata()
Dim cn As New SqlClient.SqlConnection("Data Source=localhost;Initial Catalog=MIS;Persist Security Info=True;User ID=sa;password=")
cn.Open()
Dim strSQL As String = "select test from dbo.tblTest where test>=2"
Dim da As New SqlClient.SqlDataAdapter(strSQL, cn)
Dim sqld As New SqlClient.SqlDependency(da.SelectCommand)

SqlDependency.Start(cn.ConnectionString)
ds.Clear()
da.Fill(ds, "test")
DataGridView1.DataSource = ds
DataGridView1.DataMember = "test"
DataGridView1.Refresh()
AddHandler sqld.OnChange, AddressOf Me.dataChanged


End Sub

Private Sub rebind()
getdata()
lblmsg.Text = ds.Tables("test").Rows.Count

End Sub

Private Sub dataChanged(ByVal sender As Object, ByVal e As SqlNotificationEventArgs)
changeCnt += 1
Me.Invoke(New UICallBack(AddressOf rebind))

End Sub

主要不能使用*來選取所有欄位...並且一定要有where 篩選條件..
不然dataChanged會形成無窮迴圈