A: 

You'll need to wrap your code in a try/catch block, and look at the exception's InnerException, in order to see the details of why the report rendering failed. There could be a hundred different reasons, from unexpected data in the query results to incorrect page margins, or even an exception in an expression that is embedded in the report.

I have seen up to two nested InnerExceptions (i.e. thisException.InnerException.InnerException) and it may be possible to have more, so you'll probably want to put a loop on your process to grab the Message from the innermost exception.

sfuqua