2013-02-05 33 views
0

我正在使用SMO對象來訪問我的數據庫。我在SQL Server上啓用了服務代理。我想知道是否有人知道如何啓用/禁用隊列的通過代碼(VB/C#)。我試過ServiceQueue.IsEnqueueEnabled但這只是設置屬性。如何使用SMO啓用/禁用Service Broker隊列?

+0

「只設置屬性」是什麼意思?想必你想設置它?你是否意味着在設置屬性後隊列仍然被啓用?如果是這樣,你能顯示你的代碼,並澄清你如何知道隊列仍然啓用?根據[文檔](http://msdn.microsoft.com/en-us/library/microsoft.sqlserver.management.smo.broker.servicequeue_properties(v = sql.100).aspx),「ServiceQueue.IsEnqueueEnabled」爲確實用於設置隊列是否已啓用,因此您似乎正在使用正確的屬性。 – Pondlife

+0

我想我可以更清楚。 ServiceQueue.IsEnqueueEnabled是如果啓用了隊列查不到(站)是正確的,但我想設置屬性希望它會觸發一個事件改變隊列,但事實並非如此。 – CodingOnCaffeine

+0

不幸的是,沒有看到代碼,也不知道你在哪裏檢查隊列狀態,所以不可能說出發生了什麼。你能發佈一個簡短的,自包含的SMO程序來證明你的問題嗎?如果您的SMO代碼確實無法執行任何操作,那麼您可以使用SQL事件探查器跟蹤它,以查看它在幕後執行的TSQL命令;它應該看起來像Aaron的答案。 – Pondlife

回答

1

控制STATUS = {ON | OFF}的屬性確實是.IsEnqueueEnabled。但是,所有SMO修改內存只有等到.Alter()方法被稱爲:

聖壇方法更新已經作出了ServiceQueue對象的屬性,因爲ServiceQueue對象的創建或自上次ALTER語句的任何變化。

這是與SMO對象交互的一般方式,只有在顯式應用之前,更改纔在內存中。

如果您好奇爲什麼該房產被稱爲IsEnqueueEnabled簡短的回答是名稱(正確)反映了sys.service_queues.is_enqueue_enabled的列名稱。長久以來,這個專欄就是如此命名的,因爲曾經有隊列隊伍有能力被分別禁用入隊和出隊。這種分離並沒有成爲2005 RTM的亮點,但是痕跡留在目錄視圖中。

+0

感謝一羣人。我覺得它保存在記憶中! – CodingOnCaffeine

相關問題