无限循环的备用选项

时间:2013-08-20 06:44:10

标签: c# sql-server triggers integration

我们正在运行一个使用C#,SQL SERVER的第三方应用程序。我们创建了另一个打印通行证的应用程序。

基本上,它会在远程数据库的某个表中连续检查来自第三方应用程序的新条目。如果存在新条目,则打印通过。以这种方式访问​​网络数据库并不是一种好方法,有时应用程序也会挂起。

而不是连续循环,我正在寻找其他方式:当新条目到来时,它会触发我的应用程序进行打印。或者任何其他好的实施方式。

2 个答案:

答案 0 :(得分:1)

您正在寻找的是可以帮助您的SqlDependency 听取OnChange事件。

来自msdn的例子:

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);
}

检查出来:http://msdn.microsoft.com/en-us/library/62xk7953.aspx

  

如果任何用户随后更改了基础数据,则为Microsoft SQL   服务器检测到此类更改有待处理的通知,   并发布处理并转发给客户端的通知   通过调用创建的底层SqlConnection   SqlDependency.Start。客户端侦听器接收失效   信息。然后,客户端侦听器将找到关联的SqlDependency   对象并触发OnChange事件。

答案 1 :(得分:0)

让我总结一下数据:

你需要向我们提供更多信息以获得更明智的帮助,基本上你可以:

  • 使用计时器:这样你就不会处于无限循环中而且你不会检查第三方的每一个滴答声。你可以更加复杂,并根据发现的数据变化使时间间隔增长和缩小
  • 如果您可以更改第三方,那么当它有新数据时它会发送事件或信号,那么您可以使用它并注册事件并节省大量处理时间
  • 如果您可以更改数据库添加触发器并使用它们来了解新数据,那么您不需要更多内容