Ver*_*ion 10 c# sql-server notifications visual-studio-2005
我有一个C#程序,它在SQL Server数据库中查询某些值.
目前,应用程序每分钟查询一次数据库,以确保该表是最新的.
我希望能够做的是只在数据库被更改/更新时才进行查询.如何在数据库中更新某些内容后如何通知我的程序?
谢谢
轮询数据库解决方案不是很优雅.
SqlDependency
来自ADO.NET将对您的情况有用.它不使用轮询而是使用通知机制.通知由数据库中的Service Broker提供,因此需要在数据库中启用此服务.OnChange
当指定的表更改(更新,删除,插入..)时,事件将引发
以下是如何使用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);
}
Run Code Online (Sandbox Code Playgroud)
来自http://msdn.microsoft.com/en-us/library/62xk7953.aspx
以下是如何启用Service Broker(请注意,您将在数据库上具有独占性来执行此操作 - 最好在重新启动sql server之后执行此操作):http:
//blogs.sftsrc.com/stuart/archive/2007/06/ 13/42.aspx(断开链接)
可能的替代链接:http://technet.microsoft.com/en-us/library/ms166086(v = sql.105).aspx
Est*_*aya -2
如果“更新数据库”指的是任何应用程序的任何更新,那么你就不走运了:这是不可行的。
但是,如果您指的是应用程序所做的更改,则很简单:每次更新数据库引发和事件并让处理程序响应该事件时。