Found this on a post online:
Ok, I am posting my solution here because this is the first forum I looked at when I started looking.
As it turns out you cannot reuse recordsets stuffed into SSIS object variables across multiple tasks.
There is a solution though:
This code with take your recordset and push it into an ADO.Net DataTable. From there you can do what you want with it.
DataTable dt = new DataTable();
OleDbDataAdapter adapter = new OleDbDataAdapter();
adapter.Fill(dt, Dts.Variables["ExcelSet"].
Value);
For some reason this empties your object variable. What???
Now what you have to do is take the data in your DataTable and push it back into your object variable. BUT, the other tasks (and the above code) are expecting an ADOBD.Recordset. So first you have to convert your datatable to an ADODB.Recordset. The code to do that is in the article linked below. Just copy and paste to your script code (note: code is in C#....may have to convert to VB.Net).
http://www.codeproject.com/KB/database/DataTableToRecordset.aspxDon't forget to set a reference to Microsoft Active X Objects in your script (Project>Add Reference>COM tab>Microsoft Active X Data Objects 2.X....I used 2.7 but any will work). Add a Using ADODB (or Imports ADODB) to the top of your page.
Restuff your object variable:
Dts.Variables["ExcelSet"].
Value = ConvertToRecordset(excelTa
ble);
And you are off. You can then reuse your object variable across SSIS tasks. Whew! Coming from the OO world I was quite dismayed to find this didn't work automatically. And, really Microsoft, an ADODB recordset. How 1999.