使用 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;
}
使用 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;
}