Пример #1
0
        private void rewriteThreatsDBToolStripMenuItem_Click(object sender, EventArgs e)
        {
            // Перезаписать базу угроз
            if (MessageBox.Show("Будут удалены все угрозы из таблицы в БД и записаны заново.\nПродолжить?", "Ахтунг!", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes)
            {
                using (KPSZIContext db = new KPSZIContext())
                {
                    FileInfo fi = new FileInfo("thrlist.xlsx");

                    //try
                    //{
                    //// Каскадное удаление данных вместе с внешними ключами
                    //db.Database.ExecuteSqlCommand("SET SCHEMA '" + KPSZIContext.schema_name + "'; TRUNCATE \"Threats\" CASCADE;");

                    db.Threats.AddRange(Threat.GetThreatsFromXlsx(fi, db));
                    db.SaveChanges();
                    db.SeedForThreat();
                    db.SaveChanges();
                    //}
                    //catch (Exception ex)
                    //{
                    //    MessageBox.Show("В rewriteThreatsDBToolStripMenuItem_Click Exception!\n" + ex.Message, "Ахтунг!", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    //    return;
                    //}
                }
                MessageBox.Show("Таблица угроз успешно перезаписана!", "Это успех, парень!", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }
Пример #2
0
        private void refreshThreatDBToolStripMenuItem_Click(object sender, EventArgs e)
        {
            // Обновить список угроз
            if (MessageBox.Show("Будет проведено сравнение локальной базы угроз с данными из файла \"thrlist.xlsx\" и автоматическое обновление данных.\nПродолжить?", "Ахтунг!", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
            {
                using (KPSZIContext db = new KPSZIContext())
                {
                    try
                    {
                        FileInfo      fi = new FileInfo("thrlist.xlsx");
                        List <Threat> listThreatsFromFile = Threat.GetThreatsFromXlsx(fi, db);
                        List <Threat> listThreatsFromDB   = db.Threats.OrderBy(t => t.ThreatNumber).ToList();

                        DateTime lastUpdateOfLocalDB;
                        if (listThreatsFromDB != null)
                        {
                            // Получение даты последнего обновления угроз из БД
                            lastUpdateOfLocalDB = listThreatsFromDB.Select(t => t.DateOfChange).Max();
                        }
                        else
                        {
                            lastUpdateOfLocalDB = DateTime.MinValue;
                        }

                        // Получение даты последнего обновления угроз из актуального файла с угрозами
                        DateTime lastUpdateOfFile = listThreatsFromFile.Select(t => t.DateOfChange).Max();

                        // Если нет изменений, то прекратить обновление
                        if (lastUpdateOfLocalDB == lastUpdateOfFile)
                        {
                            MessageBox.Show("База угроз не требует обновления!", "КПСЗИ", MessageBoxButtons.OK, MessageBoxIcon.Information);
                            return;
                        }

                        // Отбор угроз, претерпевших изменения
                        List <Threat> listChangedOrAddedThreats = listThreatsFromFile.Where(t => t.DateOfChange > lastUpdateOfLocalDB).ToList();

                        // Внесение изменений
                        foreach (Threat thr in listChangedOrAddedThreats)
                        {
                            Threat ThrFromDB = listThreatsFromDB.Where(t => t.ThreatNumber == thr.ThreatNumber).FirstOrDefault();

                            if (ThrFromDB == null)
                            {
                                //listThreatsFromDB.Add(thr);
                                db.Threats.Add(thr);

                                continue;
                            }

                            ThrFromDB.AvailabilityViolation = thr.AvailabilityViolation;
                            ThrFromDB.ConfidenceViolation   = thr.ConfidenceViolation;
                            ThrFromDB.DateOfAdd             = thr.DateOfAdd;
                            ThrFromDB.DateOfChange          = thr.DateOfChange;
                            ThrFromDB.Description           = thr.Description;
                            ThrFromDB.IntegrityViolation    = thr.IntegrityViolation;
                            ThrFromDB.Name = thr.Name;
                            ThrFromDB.ObjectOfInfluence = thr.Name;
                            ThrFromDB.ThreatNumber      = thr.ThreatNumber;
                            ThrFromDB.ThreatSources     = thr.ThreatSources;
                        }

                        db.SaveChanges();
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show("В refreshThreatDBToolStripMenuItem_Click Exception!\n" + ex.Message, "Ахтунг!", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        return;
                    }
                }
                MessageBox.Show("Список угроз обновлен", "Это успех, парень!", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }