public static String SaveTableV2(RequestPackage rqp) { // сюда заходим с пакетом в параметрах которого представлены строки таблицы // в формате [row_index][column_name] String msg = "MvcApplication2.Areas.Order.Models.F1Model.SaveTableV2(): \n"; if (rqp == null) { throw new NullReferenceException(); } if (rqp.Parameters == null || rqp.Parameters.Length == 0) { return msg + "\tНет параметров для разбора.\n"; } // надо сформировать запросы на сохранение для каждой строки // начинаем со строки с индексом 0 // заканчиваем когда не найдётся параметра со следующим индексом строки Int32 ri = 0; for (; ; ri++) { // создаём новый пакет для очередной строки (пока пустой) RequestPackage rqpR = new RequestPackage { SessionId = rqp.SessionId, Command = "[Pharm-Sib].[dbo].[спецификации_таблица_строка_исполнить]", Parameters = new RequestParameter[0] }; // среди всех параметров исходного пакета ищем праметры для этой строки // и копируем их в новый пакет Regex re = new Regex(String.Format(@"\[{0}\]\[(\w+)\]", ri)); foreach (RequestParameter p in rqp.Parameters) { GroupCollection groups = re.Match(p.Name).Groups; if (groups.Count == 2) { Array.Resize<RequestParameter>(ref rqpR.Parameters, rqpR.Parameters.Length + 1); rqpR.Parameters[rqpR.Parameters.Length - 1] = new RequestParameter { Name = groups[1].Value, Value = p.Value }; } } // если ничего не нашли, то заканчиваем цикл if (rqpR.Parameters.Length == 0) { break; } // если что-то есть - исполнить else { rqpR.AddSessionIdToParameters(); rqpR.ConvertParametersToSqlCompatibleType(specTableRowStoredProcFields); ResponsePackage rsp = rqpR.GetResponse("http://" + NskdEnv.DATA_SERVICE_HOST + ":" + NskdEnv.DATA_SERVICE_HOST_SQL_PORT_V12 + "/"); msg += rsp.Status; } } return msg; }