I found the Non-Iterative Data Driven Testing to be a little cumbersome so I came up with a slightly different solution, instead of using code to retrieve the data, I instead used a normal data driven test then used a public override to remove the second row from the spread sheet at the end of the test.
It works something like this; we use generatedata.com to generate hundreds of records and store them in a spread sheet, then we set the test to use only the first row of data (this is acutely the second row in excel) then when the test finishes the override removes the second row (from excels point of view) and shifts the remaining rows up to fill the gap so the next time it runs row 1 (from test studio point of view) is now the old row 2. This approach even works when you want to run multiple iterations!
public override void OnAfterTestCompleted(TestResult result)
{
string dstFile = System.IO.Path.Combine(this.ExecutionContext.DeploymentDirectory, "Data\\driver.xlsx" as string);
Microsoft.Office.Interop.Excel.Application myApp;
Microsoft.Office.Interop.Excel.Workbook myWorkBook;
Microsoft.Office.Interop.Excel.Worksheet myWorkSheet;
Microsoft.Office.Interop.Excel.Range range;
myApp = new Microsoft.Office.Interop.Excel.Application();
myWorkBook = myApp.Workbooks.Open(dstFile, 0, false, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false , 0, true, 1, 0);
myWorkSheet = (Microsoft.Office.Interop.Excel.Worksheet)myWorkBook.Worksheets.get_Item(2);
((Microsoft.Office.Interop.Excel.Worksheet)myApp.ActiveWorkbook.Sheets[1]).Select(Type.Missing);
range = (Microsoft.Office.Interop.Excel.Range)myWorkSheet.Application.Rows[2, Type.Missing];
range.Select();
range.Delete(Microsoft.Office.Interop.Excel.XlDirection.xlUp);
myApp.ActiveWorkbook.Save();
myWorkBook.Close(true);
}