使用 SqlCommand / C# 时如何取回服务代理对话框句柄?

How to get service broker dialog handle back when using SqlCommand / C#?

使用 SQL 服务器的 Service Broker 时,您必须 BEGIN DIALOG 才能启动对话。当通过 SSMS 等执行查询时,BEGIN DIALOG 查询将对话框句柄放入变量中

不过,我正在尝试使用 .NET 的 SqlCommand 来执行 BEGIN DIALOG 查询。我想 SqlCommand 到 return 对话框句柄。然后我可以在后续查询中使用该句柄。

我认为无法将 BEGIN DIALOG 查询改为 return 句柄作为查询结果。

如何通过 .NET 的 SqlCommand 执行 BEGIN DIALOG 查询,以获取该对话框句柄?

您可以在 SqlCommand 中使用输出参数。示例:

using (var cmd = new SqlCommand(@"BEGIN DIALOG CONVERSATION @dialog_handle FROM SERVICE ... TO SERVICE ... ON CONTRACT ...", connection)) {
    var handleParam = new SqlParameter("dialog_handle", SqlDbType.UniqueIdentifier) {
        Direction = ParameterDirection.Output
    };
    cmd.Parameters.Add(handleParam);
    cmd.ExecuteNonQuery();
    var dialogHandle = (Guid)handleParam.Value;                            
}