C# 如何使用SMO启用/禁用ServiceBroker队列?

C# 如何使用SMO启用/禁用ServiceBroker队列?,c#,vb.net,sql-server-2008,smo,service-broker,C#,Vb.net,Sql Server 2008,Smo,Service Broker,我正在使用SMO对象访问我的数据库。我在SQL Server上启用了service broker。我想知道是否有人知道如何通过代码(VB/C#)启用/禁用队列。我尝试了ServiceQueue.IseQueueEnabled,但这只设置了属性。控制状态={ON | OFF}的属性确实是。但所有SMO修改仅在调用该方法之前在内存中: Alter方法更新自创建ServiceQueue对象或自上次Alter语句以来对ServiceQueue对象属性所做的任何更改 这是与SMO对象交互的一般方式,只有在

我正在使用SMO对象访问我的数据库。我在SQL Server上启用了service broker。我想知道是否有人知道如何通过代码(VB/C#)启用/禁用队列。我尝试了
ServiceQueue.IseQueueEnabled
,但这只设置了属性。

控制
状态={ON | OFF}
的属性确实是。但所有SMO修改仅在调用该方法之前在内存中:

Alter方法更新自创建ServiceQueue对象或自上次Alter语句以来对ServiceQueue对象属性所做的任何更改

这是与SMO对象交互的一般方式,只有在显式应用之前,更改才会在内存中进行


如果您想知道为什么该属性被称为
IseQueueEnabled
,那么简单的答案是名称(正确地)反映了属性的列名。最重要的是,该列之所以如此命名,是因为很久以前,队列具有单独禁用入队和出队的能力。这种分离并没有使2005 RTM变得光明,但在目录视图中留下了痕迹。

什么是“仅设置属性”?大概你想设定它?您的意思是在设置属性后,队列仍然处于启用状态吗?如果是这样,您能否显示您的代码并澄清您如何知道队列仍然处于启用状态?根据
服务队列。IseQueueEnabled
确实用于设置队列是否已启用,因此您似乎使用了正确的属性。我想我可以更清楚一些。ServiceQueue.IseQueueEnabled对于查找(获取)队列是否已启用是正确的,但我尝试设置属性,希望它能够触发事件来更改队列,但事实并非如此。不幸的是,在没有看到代码和不知道检查队列状态的位置的情况下,无法说出发生了什么。你能发布一个简短、独立的SMO程序来说明你的问题吗?如果您的SMO代码真的什么都不做,那么您可以使用SQL Profiler跟踪它,查看它在幕后执行的TSQL命令;它可能看起来像Aaron的回答。@noXpert:你应该知道所有SMO交互都只在内存中,直到你真正应用它们,即调用。只有这样,服务器对象才会使用适当的DDL进行更改。