The call to the Complete() method must be made inside the try block otherwise even in case of an exception (since it is handled) the transaction is still commited. Only an unhandled exception terminates the Using block.
(the example in version 3.5 seems to be correct)