What?
Why are you using ExecuteReader on a query that doesn;t return any rows regardless of if it succeeds or fails? ExecuteReader never returns null - it returns a Reader which may or may not have rows, but it can't return null.
In this case, it will always return a reader which contains no rows because at no point in your query do you select any rows!
Return a status code by all means:
...
ROLLBACK TRAN
RETURN -1
END CATCH
END
RETURN 0
END
And use ExecuteScalar to perform the SP and return an integer result.
[edit]I can't spell "ExecuteScalar" this morning... - OriginalGriff[/edit]