Please try to do one thing.
Please put some error description on catch block to see if there is any error occurred or not. In your query if any error will occur then it will rollback the transaction and returns "0 Rows Affected".
BEGIN CATCH
IF @@TRANCOUNT > 0
Print Error_Message()
ROLLBACK TRAN
END CATCH
Please let me know if you have any concern or query.
Thanks
Advay Pandya