/// <summary> /// Добавление связанной детали к уже имеющейся. /// Добавляет связанную деталь в таблицу LinkParts и отношение между ней и /// оригинальной деталью в таблицу Links. /// </summary> public static bool InsertLinkPart(String code, LinkedPart lp) { try { ExecuteCommand(String.Format(insertLinkedPartCmd, lp.code, lp.producer, lp.type)); } catch (MySqlException ex) { if (ex.Number != 1062) { Console.WriteLine(">[err] Связанная запчасть " + lp.code + " не была добавлена в БД:\n" + ex.Message); return(false); } } try { ExecuteCommand(String.Format(insertLinkCmd, code, lp.code)); } catch (MySqlException ex) { if (ex.Number != 1062) { Console.WriteLine(">[err] Не удалось добавить связь между " + code + " и " + lp.code + ":\n" + ex.Message); return(false); } } return(true); }
/// <summary> /// Принимает в качестве аргумента xml-элемент, содержащий данные о связанных запчастях /// какой-либо запчасти. Выбирает эти данные с пом. регулярных выражений /// и возвращает их в виде списка. /// </summary> static List <LinkedPart> GetAllLinkedParts(String linksXml) { List <LinkedPart> linksXmls = new List <LinkedPart>(); Regex regex = new Regex(Core.LinkSeparator, RegexOptions.Singleline); Match match = regex.Match(linksXml); foreach (Match m in regex.Matches(linksXml)) { String linkBlock = m.Groups[1].Value; LinkedPart lp = new LinkedPart(); for (int i = 0; i < Core.LinkPatterns.Length; i++) { Match m2 = Regex.Match(linkBlock, Core.LinkPatterns[i]); switch (i) { case 0: lp.producer = m2.Groups[1].Value; break; case 1: lp.code = Core.ClearCode(m2.Groups[1].Value); break; case 2: lp.type = m2.Groups[1].Value; break; } } linksXmls.Add(lp); } return(linksXmls); }