From my point of view, SP level transactions are preferable to .Net ones. I would only use a .Net transaction in my code if I needed to execute a number of stored procedures in a batch and ensure they completed.
If there was no detrimental effects to having a failed SP call I wouldst use one at all and handle the error in code.