代码之家  ›  专栏  ›  技术社区  ›  Diego Jancic

从CLR存储过程接收Service Broker

  •  2
  • Diego Jancic  · 技术社区  · 14 年前

    我正在尝试将此T-SQL存储过程移动到CLR过程,但有一个特定于Service Broker的命令我不知道如何实现:

    DECLARE @msgBody XML    
    DECLARE @dlgId uniqueidentifier
    
    ;RECEIVE top(1) 
            @msgBody    = message_body,      
            @dlgId      = conversation_handle    
    FROM    dbo.TargetAuditQueue
    

    你知道怎么在网上做同样的事情吗?

    [SqlProcedure]
    public void AuditParseEventData()
    {
        // ???
    }
    

    谢谢!

    1 回复  |  直到 14 年前
        1
  •  2
  •   Steve Townsend    14 年前
        SqlCommand receiveCommand = contextConnection.CreateCommand();
        receiveCommand.Transaction = transaction;
        receiveCommand.CommandText = "RECEIVE TOP(1) message_body, conversation_handle FROM dbo.TargetAuditQueue";
        using (SqlDataReader reader = receiveCommand.ExecuteReader())
        {
            if (reader.Read())
            {
                SqlBinary messageBody = reader.GetSqlBinary(0);
                Guid conversationHandle = reader.GetGuid(1);
                // your stuff...
            }
        }
    

    另外,请注意会话句柄与会话ID不同。在代码中,您似乎混合了这些内容。