数据库更新后如何通知我的程序?

Ver*_*ion 10 c# sql-server notifications visual-studio-2005

我有一个C#程序,它在SQL Server数据库中查询某些值.

目前,应用程序每分钟查询一次数据库,以确保该表是最新的.

我希望能够做的是只在数据库被更改/更新时才进行查询.如何在数据库中更新某些内容后如何通知我的程序?

谢谢

nan*_*nan 9

轮询数据库解决方案不是很优雅.

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

  • 启用服务代理的链接已损坏.http://technet.microsoft.com/en-us/library/ms166086(v=sql.105).aspx (2认同)

Est*_*aya -2

如果“更新数据库”指的是任何应用程序的任何更新,那么你就不走运了:这是不可行的。

但是,如果您指的是应用程序所做的更改,则很简单:每次更新数据库引发和事件并让处理程序响应该事件时。