2012-04-06 39 views
2

如何等待从.NET客户端应用程序出现在SQL Server表中的新行?SQL Server:等待新行

背景:我想建立一个基于表的消息队列。我不想使用Service Broker,因为我希望消息具有结构化和强类型。使用普通表我也可以与其他表有关系。

+0

* GASP *触发“等待”表和一个看着你的新表开火的工作。 Service Broker真的很棒......只是说。 – SQLMason 2012-04-06 18:21:47

+0

Yeah Service Broker是完美的,但它不允许使用漂亮的表作为队列(对吗?我必须使用令人讨厌的XML blob)。 – usr 2012-04-06 18:24:55

+0

您可以编写一个proc来查看队列...您可以查询XML(不会很好地执行) – SQLMason 2012-04-06 18:57:49

回答

3

正常的方法是使用轮询,但如果您确实需要立即事件,则可以使用SqlDependency类在查询结果发生更改时获取事件。

+0

我可能需要在每个已经出队的消息之后创建一个新的依赖项。 – usr 2012-04-06 18:31:22

+0

SqlDependency使用ServiceBroker ...我也会提到它。 – SQLMason 2012-04-06 18:58:43

+0

我会接受这个答案,因为SqlDependency会自动使用Service Broker下的接收更新通知。我将为查询“从标签选择标识,其中id> @lastReceivedMessageID”注册通知。 – usr 2012-04-07 12:14:56

1

在我们的应用程序中,我们使用System.Threading.Timer来轮询数据库表。一旦有新消息可用,它正在处理中。如果处理成功,则从DB中删除消息。

2

您需要轮询或得到通知。

轮询将要求客户端定期查询表,或者使用谓词或count(*)。这可能不是一个好的解决方案。

它可能是一个便宜但有用的通知系统,在表中放置触发器并向客户端的侦听器发送消息。