/* Загрузка изменений в БД */ private void setDataToDB() { int productType = -1; int marketPlaceId = -1; string errors = ""; string errorsToCopy = ""; int categoryId = -1; DateTime dtNow; //находим productTypeId по выбранному в cb_ProductType productType = currentProductTypeId; marketPlaceId = currentMarketPlaceId; for (int i = 0; i < kcList.Count; i++) //находим keywordCategoryId по выбранному в cb_CategoryId { if (kcList[i].CategoryName.Equals(cb_KeywordCategory.SelectedItem.ToString())) { categoryId = kcList[i].CategoryId; } } if (productType == -1 || categoryId == -1 || marketPlaceId == -1) { MessageBox.Show("Выберите вид продукта, категорию ключей и маркетплейс.", "Ошибка"); return; } int index = -1; for (int i = 0; i < dgv_Target.RowCount; i++) { index = i; int val = 0; try { val = int.Parse(dgv_Target.Rows[i].Cells[1].Value.ToString()); } catch (Exception exx) { val = 0; } dtNow = DateTime.Now; //если ключ уже есть в БД, БД выдаст ошибку -2146232060. Сверяем и записываем ключи в массив недобавленных ключей if (scController.InsertNewKeyword(productType, categoryId, dgv_Target.Rows[i].Cells[0].Value.ToString(), val, dtNow, marketPlaceId) == -2146232060) { errors += dgv_Target.Rows[index].Cells[0].Value.ToString() + "\n"; errorsToCopy += dgv_Target.Rows[index].Cells[0].Value.ToString() + "\t" + val + "\n"; } else { //сюда для АРХИВА scaController.InsertNewKeywordToSemCoreArchive(productType, categoryId, dgv_Target.Rows[i].Cells[0].Value.ToString(), val, dtNow, scaController.GetSemCoreIdForKey(dgv_Target.Rows[i].Cells[0].Value.ToString()), marketPlaceId); } } if (!errors.Equals("")) { MessageBox.Show("Следующие ключи не были добавлены, т.к. они уже есть в БД. Эти ключи были скопированы и сейчас находятся в буфере обмена. Можете вставить их в Excel или любой текстовый редактор. Ниже приведен список этих ключей:\n\n" + errors, "Не всё прошло гладко"); Clipboard.SetText(errorsToCopy); } else { MessageBox.Show("Все ключи были успешно добавлены!", "Успех"); } }
/* Загрузка изменений в БД */ private void setDataToDB() { int productType = -1; string errors = ""; int categoryId = -1; bool categoryCreated = true; if (rb_NewCategory.Checked) //сохраняем в новой categoryId { int result = kcController.SetNewKeywordCategory(tb_AddCategory.Text); if (result == 1) { kcController.GetKeywordCategoriesAll(); Fill_CB_ByKeywordCategories(); cb_KeywordCategory.SelectedItem = cb_KeywordCategory.Items[cb_KeywordCategory.Items.Count - 1]; } else if (result == -2146232060) { MessageBox.Show("Вы пытаетесь создать категорию ключей, которая уже существует. Пожалуйста, выберите категорию со списка или введите другое название.", "Ошибка"); categoryCreated = false; } } if (categoryCreated) //проверяем на то, что при создании категории всё было ок и можно продолжать { for (int i = 0; i < ptList.Count; i++) //находим productTypeId по выбранному в cb_ProductType { if (ptList[i].TypeName.Equals(cb_ProductType.SelectedItem.ToString())) { productType = ptList[i].ProductTypeId; } } for (int i = 0; i < kcList.Count; i++) //находим productTypeId по выбранному в cb_ProductType { if (kcList[i].CategoryName.Equals(cb_KeywordCategory.SelectedItem.ToString())) { categoryId = kcList[i].CategoryId; } } int index = -1; for (int i = 0; i < dgv_Target.RowCount; i++) { index = i; //если ключ уже есть в БД, БД выдаст ошибку -2146232060. Сверяем и записываем ключи в массив недобавленных ключей if (scController.InsertNewKeyword(productType, categoryId, dgv_Target.Rows[i].Cells[0].Value.ToString(), int.Parse(dgv_Target.Rows[i].Cells[1].Value.ToString()), DateTime.Now) == -2146232060) { errors += dgv_Target.Rows[index].Cells[0].Value.ToString() + "\n"; } } if (!errors.Equals("")) { MessageBox.Show("Следующие ключи не были добавлены, т.к. они уже есть в БД:\n\n" + errors, "Не всё прошло гладко"); } else { MessageBox.Show("Все ключи были успешно добавлены!", "Успех"); } SavedStatus = true; } }
//------------------------------------------------------------------------------------------------------------------------------------------ /* Запуск основной логики */ private void btn_Begin_Click(object sender, EventArgs e) { bool isExist = false; //новый это ключ, или существует в БД, пусть и в другой категории scNewList = new List <SemCoreModel> { }; scUpdateList = new List <SemCoreModel> { }; List <SemCoreModel> scAddedList = new List <SemCoreModel> { }; int newCnt = 0; if (MessageBox.Show("Вы уверены, что хотите начать процедуру сверки ключей?", "Начать", MessageBoxButtons.OKCancel) == DialogResult.OK) { dgv_Target.Rows.Clear(); this.Enabled = false; int val = 0; for (int i = 0; i < dgv_Source.RowCount; i++) { scNewList.Add(new SemCoreModel()); scNewList[scNewList.Count - 1].Keyword = dgv_Source.Rows[i].Cells[0].Value.ToString(); try { val = int.Parse(dgv_Source.Rows[i].Cells[1].Value.ToString()); } catch (Exception exx) { val = 0; } //это если вдруг ячейка с частотой будет пустая scNewList[scNewList.Count - 1].Value = val; if (scController.InsertNewKeyword(GetSelectedProductTypeId(), GetSelectedCategoryId(), scNewList[scNewList.Count - 1].Keyword, scNewList[scNewList.Count - 1].Value, DateTime.Now, 1) != 1) { scUpdateList.Add(new SemCoreModel()); scUpdateList[scUpdateList.Count - 1].ProductTypeId = GetSelectedProductTypeId(); scUpdateList[scUpdateList.Count - 1].CategoryId = GetSelectedCategoryId(); scUpdateList[scUpdateList.Count - 1].Keyword = scNewList[scNewList.Count - 1].Keyword; scUpdateList[scUpdateList.Count - 1].Value = scNewList[scNewList.Count - 1].Value; scUpdateList[scUpdateList.Count - 1].LastUpdated = DateTime.Now; isExist = true; } else { newCnt++; scAddedList.Add(new SemCoreModel()); scAddedList[scAddedList.Count - 1].Keyword = scNewList[scNewList.Count - 1].Keyword; scAddedList[scAddedList.Count - 1].Value = scNewList[scNewList.Count - 1].Value; //сюда для АРХИВА - новые scaController.InsertNewKeywordToSemCoreArchive(GetSelectedProductTypeId(), GetSelectedCategoryId(), scNewList[scNewList.Count - 1].Keyword, scNewList[scNewList.Count - 1].Value, DateTime.Now, scaController.GetSemCoreIdForKey(scNewList[scNewList.Count - 1].Keyword), 1); } } //обновляем существующие ключи if (isExist) { UpdateExistingKeywordsInDB(newCnt, scAddedList); } else { MessageBox.Show("Всего ключей было добавлено: " + newCnt + "\nКоличество обновленных ключей: 0", "Успех"); dgv_Source.Rows.Clear(); dgv_Target.Rows.Clear(); Fill_dgv_Source_ByAddedKeys(scAddedList); } label1.Visible = true; dgv_Source.Visible = false; dgv_Target.Visible = false; btn_SelectAll.Visible = false; btn_DeselectAll.Visible = false; lb_UploadedKeys.Visible = false; lb_UpdatedKeys.Visible = false; btn_ClearAll.Visible = false; this.Enabled = true; } }
/* Добавляем новые ключи в БД (ключи, которых нет в выбранной категории) */ private void CreateNewKeywordsInDB() { bool error = false; //признак ошибки при записи нового ключа в БД; значит, такой ключ уже есть int j = 0; string[,] _alreadyExistedKeywords = new string[dgv_NewKeys.RowCount, 2]; //ключи, которые уже есть в БД, но в другой категории List <int> forDeleting = new List <int> { }; for (int i = 0; i < dgv_NewKeys.RowCount; i++) { if (scController.InsertNewKeyword(int.Parse(dgv_NewKeys.Rows[i].Cells[0].Value.ToString()), int.Parse(dgv_NewKeys.Rows[i].Cells[1].Value.ToString()), dgv_NewKeys.Rows[i].Cells[2].Value.ToString(), int.Parse(dgv_NewKeys.Rows[i].Cells[3].Value.ToString()), DateTime.Now) == 1) { //progressBar1.Value++; } else { _alreadyExistedKeywords[j, 0] = dgv_NewKeys.Rows[i].Cells[2].Value.ToString(); _alreadyExistedKeywords[j, 1] = dgv_NewKeys.Rows[i].Cells[3].Value.ToString(); j++; error = true; forDeleting.Add(i); //progressBar1.Value++; } } //удаляем ключи из dgv_NewKeys, т.к. они не новые, а просто есть в другой категории for (int i = forDeleting.Count - 1; i >= 0; i--) { dgv_NewKeys.Rows.RemoveAt(forDeleting[i]); } lb_NewKeys.Text = str_NewKeys + " (" + dgv_NewKeys.RowCount + ")"; lb_UpdatedKeys.Text = str_UpdatedKeys + " (" + dgv_Target.RowCount + ")"; lb_UploadedKeys.Text = str_UploadedKeys + " (" + dgv_Source.RowCount + ")"; if (error) { if (MessageBox.Show("Некоторые ключи не были обновлены, т.к. они принадлежат другой категории. Обновить их всё равно? Если нет, автоматически откроется окно для редактирования всех необновленных ключей.", "Внимание", MessageBoxButtons.OKCancel) == DialogResult.OK) { //все равно обновляем эти ключи for (int i = 0; i < _alreadyExistedKeywords.Length / 2; i++) { scController.UpdateExistingKeywordByKeyword(int.Parse(GetSelectedProductTypeId().ToString()), int.Parse(GetSelectedCategoryId().ToString()), _alreadyExistedKeywords[i, 0], int.Parse(_alreadyExistedKeywords[i, 1]), DateTime.Now); } } else { //редактируем эти ключи, а потом передаем обратно сюда KeywordsAreExistedView kae = new KeywordsAreExistedView(_alreadyExistedKeywords, cb_KeywordCategory.SelectedItem.ToString()); if (kae.ShowDialog() == DialogResult.OK) { Fill_dgv_Source_ByExistingKeys(_alreadyExistedKeywords); } dgv_NewKeys.ScrollBars = ScrollBars.Both; progressBar1.Visible = false; progressBar1.Value = 0; } } else { MessageBox.Show("Все данные были обновлены успешно.", "Успех"); dgv_NewKeys.ScrollBars = ScrollBars.Both; progressBar1.Visible = false; progressBar1.Value = 0; } }