Это должно работать:
//iterate the array
for (int i = 0; i < theData.Length; i+=3)
{
//grab 3 items at a time and do db insert, continue until all items are gone. 'theData' will always be divisible by 3.
var a = theData[i];
var b = theData[i + 1];
var c = theData[i + 2];
}
Один раз за этот ответ я проголосовал. Я уверен, что это связано с использованием theData.Length для верхней границы. Код как есть, работает нормально, потому что массив гарантированно будет кратным трем, как указано в вопросе. Если этой гарантии не было, вам нужно проверить верхнюю границу с помощью Data.Length - 2.