Yup, exactly on the first point...that's why I gave him the code from my CR library, that does this...
foreach (Table oTable in oReport.Database.Tables)
oTable.SetDataSource (DsReportData.Tables[oTable.Name.ToString()]);
Side benefit is that if you've called table names differently, this will let you know (albeit in a rather ugly runtime error way!)
And on the 2nd point, the rowcount shouldn't affect anything - I was curious if the table simply had the structure that the report was looking for. A table could be the correct table structure and have zero rows (which would work), or the table could have 1 row but be missing a column (which wouldn't work). The fact that Kevin said his process worked fine on a test machine but not a production server had me wondering if maybe the stored proc (on the 2nd server) that returned the result set wasn't bringing back all of the columns.