Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Objek SqlDependency dapat dikaitkan dengan SqlCommand untuk mendeteksi jika hasil kueri berbeda dari yang diambil semula. Anda juga dapat menetapkan delegasi ke peristiwa OnChange, yang akan diaktifkan saat hasilnya berubah untuk perintah terkait. Anda harus mengaitkan SqlDependency dengan perintah sebelum menjalankan perintah. Properti HasChanges dari SqlDependency juga dapat digunakan untuk menentukan apakah hasil kueri telah berubah sejak data pertama kali diambil.
Pertimbangan Keamanan
Infrastruktur dependensi bergantung pada SqlConnection yang dibuka ketika Start dipanggil untuk menerima pemberitahuan bahwa data yang mendasar telah berubah untuk perintah tertentu. Kemampuan klien untuk memulai panggilan ke SqlDependency.Start dikendalikan melalui penggunaan SqlClientPermission dan atribut keamanan akses kode. Untuk informasi selengkapnya, lihat Mengaktifkan Pemberitahuan Kueri dan Keamanan Akses Kode dan ADO.NET.
Contoh
Langkah-langkah berikut mengilustrasikan cara mendeklarasikan dependensi, menjalankan perintah, dan menerima pemberitahuan saat kumpulan hasil berubah:
Memulai koneksi
SqlDependencyke server.Buat objek SqlConnection dan SqlCommand untuk terhubung ke server dan tentukan pernyataan Transact-SQL.
Buat objek
SqlDependencybaru, atau gunakan yang sudah ada, dan ikat ke objekSqlCommand. Secara internal, ini membuat objek SqlNotificationRequest dan mengikatnya ke objek perintah sesuai kebutuhan. Permintaan pemberitahuan ini berisi pengenal internal yang secara unik mengidentifikasi objekSqlDependencyini. Ini juga memulai pendengar klien jika belum aktif.Berlangganan penanganan aktivitas ke peristiwa
OnChangeuntuk objekSqlDependency.Jalankan perintah menggunakan salah satu metode
Executedari objekSqlCommand. Karena perintah terikat ke objek pemberitahuan, server mengenali bahwa ia harus membuat pemberitahuan, dan informasi antrean akan mengarah ke antrean dependensi.Hentikan koneksi
SqlDependencyke server.
Jika ada pengguna yang kemudian mengubah data yang mendasarinya, Microsoft SQL Server mendeteksi bahwa ada pemberitahuan yang tertunda untuk perubahan tersebut, dan memposting pemberitahuan yang diproses dan diteruskan ke klien melalui SqlConnection yang mendasarinya yang dibuat dengan memanggil SqlDependency.Start. Pendengar klien menerima pesan pembatalan. Pendengar klien kemudian menemukan objek SqlDependency terkait dan mengaktifkan peristiwa OnChange.
Fragmen kode berikut menunjukkan pola desain yang akan Anda gunakan untuk membuat aplikasi sampel.
Sub Initialization()
' Create a dependency connection.
SqlDependency.Start(connectionString, queueName)
End Sub
Sub SomeMethod()
' Assume connection is an open SqlConnection.
' Create a new SqlCommand object.
Using command As New SqlCommand( _
"SELECT ShipperID, CompanyName, Phone FROM dbo.Shippers", _
connection)
' Create a dependency and associate it with the SqlCommand.
Dim dependency As New SqlDependency(command)
' Maintain the reference in a class member.
' Subscribe to the SqlDependency event.
AddHandler dependency.OnChange, AddressOf OnDependencyChange
' Execute the command.
Using reader = command.ExecuteReader()
' Process the DataReader.
End Using
End Using
End Sub
' Handler method
Sub OnDependencyChange(ByVal sender As Object, _
ByVal e As SqlNotificationEventArgs)
' Handle the event (for example, invalidate this cache entry).
End Sub
Sub Termination()
' Release the dependency
SqlDependency.Stop(connectionString, queueName)
End Sub
void Initialization()
{
// Create a dependency connection.
SqlDependency.Start(connectionString, queueName);
}
void SomeMethod()
{
// Assume connection is an open SqlConnection.
// Create a new SqlCommand object.
using (SqlCommand command=new SqlCommand(
"SELECT ShipperID, CompanyName, Phone FROM dbo.Shippers",
connection))
{
// Create a dependency and associate it with the SqlCommand.
SqlDependency dependency=new SqlDependency(command);
// Maintain the reference in a class member.
// Subscribe to the SqlDependency event.
dependency.OnChange+=new
OnChangeEventHandler(OnDependencyChange);
// Execute the command.
using (SqlDataReader reader = command.ExecuteReader())
{
// Process the DataReader.
}
}
}
// Handler method
void OnDependencyChange(object sender,
SqlNotificationEventArgs e )
{
// Handle the event (for example, invalidate this cache entry).
}
void Termination()
{
// Release the dependency.
SqlDependency.Stop(connectionString, queueName);
}