Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无限循环的替代选项_C#_Sql Server_Triggers_Integration - Fatal编程技术网

C# 无限循环的替代选项

C# 无限循环的替代选项,c#,sql-server,triggers,integration,C#,Sql Server,Triggers,Integration,我们正在运行一个使用C#,SQL SERVER的第三方应用程序。我们已经创建了另一个打印通行证的应用程序 基本上,它在远程数据库的一个表中连续检查来自第三方应用程序的新条目。如果存在新条目,则打印pass。以这种方式访问网络数据库不是一种好方法,有时应用程序也会挂起 我正在寻找其他方法,而不是连续循环,比如:当新条目出现时,它会触发我的打印应用程序。或任何其他好的实施方式。您所寻找的是能够帮助您 收听OnChange事件 msdn中的示例: void Initialization() {

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

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


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

您所寻找的是能够帮助您 收听
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);
}
请查看:

如果任何用户随后更改了基础数据,则Microsoft SQL 服务器检测到此类更改的通知处于挂起状态, 并发布经过处理并转发给客户端的通知 通过调用 SqlDependency.Start。客户机侦听器接收无效 消息然后,客户机侦听器定位关联的SqlDependency 对象并激发OnChange事件


让我总结一下数据:

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

  • 使用计时器:这样你就不会处于无限循环中,也不会每隔几次就检查第三方。您甚至可以更加复杂,并根据发现的数据更改或未发现的数据更改,使时间间隔增长或缩短
  • 如果您可以更改第三方,使其在有新数据时发送事件或信号,那么您可以使用它并注册到事件,从而节省大量处理时间
  • 如果您可以更改DB add触发器并使用它们来了解,那么新数据就会出现,因此您不需要更多

您能展示一下您的代码吗?这将有助于我们更好地回答???计时器,它将每
x
ms触发一些动作。您在这里遗漏了很多细节。。。对于初学者来说,任何人都应该如何知道这个第三方应用程序是否可以支持其他任何东西?是否允许您对数据库进行更改?似乎在表上设置一个触发器将消息添加到ServiceBroker队列,并让您的代码从同一队列接收消息是合理的。我同意@wudzik。我们有一个每秒接收新数据的服务器,所以我制作了一个
计时器
,试图每隔200-500毫秒从数据库中获取数据。使用触发器“我如何知道新数据?”come@RAHUL从阅读触发器开始,看看并尝试一些例子:/i我的意思是使用触发器,我可以执行任何sql语句(在其他表中创建新条目)但我不能C#。@RAHUL我复制了Damien#u Unsiever的评论,因为它说明了一切:似乎在表上有一个触发器将消息添加到ServiceBroker队列,并让您的代码从同一队列接收消息是合理的