Well, I would recomment a totally different approach here. Since, it is related to salary which are assumed to be kept highly confidential, you should not risk on generating all at a time and then splitting it to send.
Instead, just make a small change here. Put a simple WHERE clause in the query of the report data.
For now, it would be something like
SELECT
*
FROM
Salary
, instead make it as
SELECT
*
FROM
Salary
WHERE
EmployeeID = @EmployeeID
Now, in your code, loop through all the employees and pass on the related employeeID, get the details, create report, export it and send across an email. If you see, this approach has made sure that data specific to an employee is fetched and sent at a time. Even if there is some kind of an error or issue it would be with one person.
If you want you can add this parameter to the report that would pass on the value to query while fetching data.