2012-04-06 41 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(*)。這可能不是一個好的解決方案。

它可能是一個便宜但有用的通知系統,在表中放置觸發器並向客戶端的偵聽器發送消息。