Baza danych odpytywania nie jest zbyt eleganckim rozwiązaniem.
SqlDependency
z ADO.NET przyda się w Twoim przypadku. Nie korzysta z odpytywania, ale z mechanizmu powiadamiania. Powiadomienia są dostarczane przez Service Broker w Twojej bazie danych, więc musisz włączyć tę usługę w Twojej bazie danych. OnChange
zdarzenie zostanie wywołane, gdy określona tabela zmieni się (aktualizacja, usunięcie, wstawienie..)
Oto przykład, jak używać SqlDependency:
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 refence 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);
}
z http://msdn.microsoft.com/en-us/library/ 62xk7953.aspx
Oto jak włączyć Service Broker (pamiętaj, że będziesz mieć wyłączność na bazę danych, aby to zrobić - najlepiej zrobić to po ponownym uruchomieniu serwera sql):http://blogs.sftsrc.com/stuart/archive/2007/06/13/42.aspx
(Uszkodzony link)
Możliwy alternatywny link:http://technet. microsoft.com/en-us/library/ms166086(v=sql.105).aspx