Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Obiekt SqlDependency można skojarzyć z elementem , SqlCommand aby wykryć, kiedy wyniki zapytania różnią się od pierwotnie pobranych wyników. Możesz również przypisać delegata do OnChange zdarzenia, które zostanie uruchomione po zmianie wyników dla skojarzonego polecenia. Przed wykonaniem polecenia skojarz polecenie SqlDependency z poleceniem . Właściwość HasChangesSqlDependency obiektu można również użyć do określenia, czy wyniki zapytania uległy zmianie od czasu pierwszego pobrania danych.
Zagadnienia dotyczące zabezpieczeń
Infrastruktura zależności opiera się na SqlConnection, który jest otwierany, gdy Start zostaje wywołane, aby odbierać powiadomienia o zmianie danych źródłowych dla danego polecenia. Możliwość rozpoczęcia wywołania SqlDependency.Start przez klienta jest kontrolowana przy użyciu SqlClientPermission i atrybutów zabezpieczeń dostępu do kodu. Aby uzyskać więcej informacji, zobacz Włączanie powiadomień o zapytaniach.
Example
Poniższe kroki ilustrują sposób deklarowania zależności, wykonywania polecenia i odbierania powiadomienia po zmianie zestawu wyników:
Zainicjuj
SqlDependencypołączenie z serwerem.Utwórz obiekty SqlConnection i SqlCommand do połączenia z serwerem i zdefiniowania instrukcji Transact-SQL.
Utwórz nowy
SqlDependencyobiekt lub użyj istniejącego obiektu i powiąż go z obiektemSqlCommand. Wewnętrznie to skojarzenie tworzy SqlNotificationRequest obiekt i wiąże go z obiektem polecenia zgodnie z potrzebami. To żądanie powiadomienia zawiera wewnętrzny identyfikator, który jednoznacznie identyfikuje tenSqlDependencyobiekt. Uruchamia również odbiornik klienta, jeśli nie jest jeszcze aktywny.Podłącz program obsługi do zdarzenia
OnChangeobiektuSqlDependency.Wykonaj polecenie przy użyciu dowolnej metody
ExecuteSqlCommandobiektu. Ponieważ polecenie jest powiązane z obiektem powiadomień, serwer rozpoznaje, że musi wygenerować powiadomienie, a informacje o kolejce będą wskazywać kolejkę zależności.Zatrzymaj
SqlDependencypołączenie z serwerem.
Jeśli jakikolwiek użytkownik zmieni dane bazowe, program Microsoft SQL Server wykryje, że istnieje powiadomienie oczekujące na taką zmianę, a następnie publikuje powiadomienie, które jest przetwarzane i przekazywane do klienta za pośrednictwem bazowego SqlConnection , który został utworzony przez wywołanie metody SqlDependency.Start. Odbiornik klienta odbiera komunikat o unieważnieniu. Następnie odbiornik klienta lokalizuje skojarzony obiekt SqlDependency i uruchamia zdarzenie OnChange.
Poniższy fragment kodu przedstawia wzorzec projektu używany do utworzenia przykładowej aplikacji.
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);
}