Microsoft KB Archive/246222

= MSMQQueueInfo Object IsTransactional property returns an integer =

Article ID: 246222

Article Last Modified on 2/23/2007

-

APPLIES TO


 * Microsoft Message Queuing 2.0
 * Microsoft Message Queue Server 1.0

-



This article was previously published under Q246222



SYMPTOMS
The IsTransactional property of a Microsoft Message Queuing queue 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:   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                        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 Microsoft Message Queuing and will remain consistent. Future versions of the Microsoft Message Queuing 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.

