I am using the code posted here to switch report db at runtime (trdp's designed outside of my application then hosted by http).
One thing I picked up is that sub-reports are not handled properly, gives an error because the path is not found during this call in 'SetConnectionString'
subReport.ReportSource above will be a simple filename (assuming the sub-report was designed in the same folder as the main report) which means the report file will not be found during deserialization.
I can't post my working routine as it has become too customized but if you're doing this you must ensure that subReport.ReportSource is properly set to a full path before calling UpdateReportSource (or in UpdateReportSource). I hope this helps anyone who has this problem.