2

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

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

我正在寻找其他方式而不是连续循环,例如:随着新条目的出现,它会触发我的打印应用程序。或任何其他实现的好方法。

4

2 回答 2

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 Server 会检测到此类更改存在未决通知,并发布一个通知,该通知通过调用 SqlDependency.Start 创建的基础 SqlConnection 进行处理并转发到客户端。客户端侦听器接收到无效消息。然后,客户端侦听器找到关联的 SqlDependency 对象并触发 OnChange 事件。

于 2013-08-20T06:49:58.357 回答
0

让我总结一下数据:

您需要在这里向我们提供更多信息以获得更智能的帮助,但基本上您可以:

  • 使用计时器:这样您就不会处于无限循环中,并且您不会每隔几个滴答检查一次第三方。您甚至可以更复杂,并根据是否发现数据更改使时间间隔增长和缩小
  • 如果您可以更改第 3 方,以便它在有新数据时发送事件或信号,那么您可以使用它并注册到事件并节省大量处理时间
  • 如果您可以更改数据库添加触发器并使用它们来了解新数据,那么您就不需要更多了
于 2013-08-20T06:51:44.723 回答