Вместо того чтобы делать отдельный вызов хранимой процедуры для каждой пары (L, C), сделайте один вызов, который выбирает все пары в таблице. Надеемся, что нет никаких предварительных условий, которые бы препятствовали этому. В противном случае из-за одних только вызовов SQL вы не сможете получить данные обратно менее чем за 3 секунды. Потяните данные в SqlDataReader, если можете.
Затем заполните переменную 2D-массива в соответствии с соотношением (L, C) в полученных данных. В Excel используется массив на основе 1, который можно эмулировать (но не обязательно), как показано ниже:
// this creates a 1-based 2D array with 5 rows, 2 columns (5,2)
var my2DArray = Array.CreateInstance(
typeof(object), new int[] { 5, 2 }, new int[] { 1, 1 });
После заполнения 2D-массива установите массив на лист Excel. Код будет выглядеть примерно так:
// not sure what your cell refs are, so I'll be arbitrary...
var rng = myWorksheet.get_Range("A1", "B1");
rng = rng.get_Resize(my2DArray.GetUpperBound(0), my2DArrary.GetUpperBound(1));
rng.Value2 = my2DArray;
Это должен быть самый быстрый способ по сравнению с настройкой значений ячейки по одному.