PRB: MSMQQueueInfo Object IsTransactional Property Returns An Integer

ID: Q246222


The information in this article applies to:
  • Microsoft Message Queue Server versions 1.0, 2.0


SYMPTOMS

The IsTransactional property of a Microsoft Message Queue (MSMQ) MSMQQueueInfo object returns an Integer result rather than a Boolean. IsTransactional property returns a 1 if the queue is transactional and a 0 if it is not. This can cause logic errors in a Visual Basic (VB) program if the property is used in the expression portion of an If, While, or similar conditional statement.

When a numeric value is used in a condition statement in VB, 0 is evaluated as false and all non-zero values are evaluated as true. The Not operator in VB inverts the bits of a value when used on a numeric value. The expression "Not 1" produces the result "-2" which is considered a "true" value in a VB condition statement.

Since VB evaluates both "1" and "Not 1" as true statements, if a queue is open both "queueinfo.IsTransactional" and "Not queueinfo.IsTransactional" evaluates true. In the following example code, if the queue is transactional both message boxes appear:


If queueinfo.IsTransactional Then
   MsgBox "The queue is transactional."
End If

If Not queueinfo.IsTransactional Then
   MsgBox "The queue is not transactional."
End If 


RESOLUTION

There are two possible workarounds for the problem:

  1. Explicitly test the value of the IsTransactional property against 0 and 1. A value of 1 indicates that the queue is transactional, a value of 0 indicates that the queue is not transactional. An example of this test is shown in the following code:
    
    If MSMQQueueInfoObject.IsTransactional = 1 Then
       MsgBox "The queue is transactional."
    End If
    
    If MSMQQueueInfoObject.IsTransactional = 0 Then
       MsgBox "The queue is not transactional."
    End If 


  2. Avoid "negative" tests that use the Not operator with the IsTransactional property.



STATUS

It is safe to test explicitly for the 1 and 0 values. These values will not be changed in any future version of MSMQ and will remain consistent. Future versions of the MSMQ ActiveX components may add a property that may be evaluated as a true Boolean type for testing this characteristic.


MORE INFORMATION

The MSDN Online help describes the return values for the IsTransactional property as follows:


MSMQQueueInfo.IsTransactional

Return Values
   1 
      The queue is only used in transactions. 
   0 
      The queue is not used in transactions. 


REFERENCES

MSDN Online help for the MSMQQueueInfo object type.
Visual Basic Programmers Guide

Q246218 MSMQMessage Object IsAuthenticated Property Returns an Integer

Q245753 MSMQQueue Object IsOpen Property Returns an Integer

Q246225 MSMQQueueInfo Object IsWorldReadable Property Returns and Integer

Q246458 MSMQMessage Object IsFirstInTransaction Property Returns An Integer

Q246460 MSMQMessage Object IsLastInTransaction Property Returns An Integer

Additional query words:

Keywords : kbMSMQ kbMSMQ100 kbMSMQ100bug kbDSupport
Version : winnt:1.0,2.0
Platform : winnt
Issue type : kbprb


Last Reviewed: November 30, 1999
© 2000 Microsoft Corporation. All rights reserved. Terms of Use.