RunQuestionDialog() public static method

public static RunQuestionDialog ( string question ) : bool
question string
return bool
Exemplo n.º 1
0
        protected void OnButtonDeleteClicked(object sender, EventArgs e)
        {
            TreeIter iter;

            treeviewUsers.Selection.GetSelected(out iter);
            int    itemid    = (int)UsersListStore.GetValue(iter, 0);
            string loginname = UsersListStore.GetValue(iter, 1).ToString();
            bool   result;

            if (QSMain.IsOrmDeletionConfigered)
            {
                result = QSMain.OnOrmDeletion("users", itemid);
            }
            else
            {
                Delete winDel = new Delete();
                result = winDel.RunDeletion("users", itemid);
                winDel.Destroy();
            }

            if (result)
            {
                if (QSSaaS.Session.IsSaasConnection)
                {
                    logger.Info("Удаляем пользователя в облаке...");
                    QSSaaS.ISaaSService svc = QSSaaS.Session.GetSaaSService();

                    if (!svc.changeBaseAccessFromProgram(QSSaaS.Session.SessionId, loginname, QSSaaS.Session.SaasBaseName, false))
                    {
                        logger.Error("Ошибка удаления доступа к базе на сервере SaaS.");
                    }

                    if (svc.UserAccessBaseCount(QSSaaS.Session.SessionId, QSSaaS.Session.Account, loginname) == 0)
                    {
                        if (MessageDialogWorks.RunQuestionDialog($"У пользователя '{loginname}' на сервисе QS:Облако больше не осталось баз данных, к которым он имеет доступ. Удалить пользователя с QS:Облако тоже?"))
                        {
                            if (!svc.DeleteCloudUser(QSSaaS.Session.SessionId, QSSaaS.Session.Account, loginname))
                            {
                                var text = "Удаления пользователя с QS:Облако не произошло.";
                                logger.Error(text);
                                MessageDialogWorks.RunErrorDialog(text);
                            }
                        }
                    }
                }
                else
                {
                    logger.Info("Удаляем пользователя MySQL...");
                    string sql;
                    sql = "DROP USER @login, @login @'localhost'";
                    try {
                        QSMain.CheckConnectionAlive();
                        MySqlCommand cmd = new MySqlCommand(sql, QSMain.connectionDB);
                        cmd.Parameters.AddWithValue("@login", loginname);
                        cmd.ExecuteNonQuery();
                        logger.Info("Пользователь удалён. Ok");

                        if (QSMain.User.Id == itemid)
                        {
                            MessageDialog md = new MessageDialog(this, DialogFlags.DestroyWithParent,
                                                                 MessageType.Warning, ButtonsType.Close,
                                                                 "Был удален пользователь, под которым Вы подключились к базе данных, чтобы недопустить некорректных операций программа закроется. Зайдите в программу от имени другого пользователя.");
                            md.Run();
                            md.Destroy();
                            Environment.Exit(0);
                        }
                    } catch (Exception ex) {
                        logger.Error(ex, "Ошибка удаления пользователя!");
                        QSMain.ErrorMessage(this, ex);
                    }
                }
            }

            UpdateUsers();
        }
Exemplo n.º 2
0
        public static void RunCreation(CreationScript script, string server, string dbname, string login, string password)
        {
            if (script == null)
            {
                script = Scripts.First();
            }

            string connStr, host;
            uint   port = 3306;

            string[] uriSplit = server.Split(new char[] { ':' }, 2, StringSplitOptions.RemoveEmptyEntries);

            host = uriSplit [0];
            if (uriSplit.Length > 1)
            {
                uint.TryParse(uriSplit [1], out port);
            }

            var conStrBuilder = new MySqlConnectionStringBuilder();

            conStrBuilder.Server   = host;
            conStrBuilder.Port     = port;
            conStrBuilder.UserID   = login;
            conStrBuilder.Password = password;

            connStr = conStrBuilder.GetConnectionString(true);

            var connectionDB = new MySqlConnection(connStr);

            try {
                logger.Info("Connecting to MySQL...");

                connectionDB.Open();
            } catch (MySqlException ex) {
                logger.Info("Строка соединения: {0}", connStr);
                logger.Error(ex, "Ошибка подключения к серверу.");
                if (ex.Number == 1045 || ex.Number == 0)
                {
                    MessageDialogWorks.RunErrorDialog("Доступ запрещен.\nПроверьте логин и пароль.");
                }
                else if (ex.Number == 1042)
                {
                    MessageDialogWorks.RunErrorDialog("Не удалось подключиться к серверу БД.");
                }
                else
                {
                    MessageDialogWorks.RunErrorDialog("Ошибка соединения с базой данных.");
                }

                connectionDB.Close();
                return;
            }

            logger.Info("Проверяем существует ли уже база.");

            var  sql          = "SHOW DATABASES;";
            var  cmd          = new MySqlCommand(sql, connectionDB);
            bool needDropBase = false;

            using (var rdr = cmd.ExecuteReader())
            {
                while (rdr.Read())
                {
                    if (rdr [0].ToString() == dbname)
                    {
                        if (MessageDialogWorks.RunQuestionDialog("База с именем `{0}` уже существует на сервере. Удалить существующую базу перед соданием новой?", dbname))
                        {
                            needDropBase = true;
                            break;
                        }
                        else
                        {
                            return;
                        }
                    }
                }
            }

            logger.Info("Создаем новую базу.");
            progressDlg = new CreatorProgress();
            progressDlg.OperationText = "Получаем скрипт создания базы";
            progressDlg.Show();

            string sqlScript;

            using (Stream stream = System.Reflection.Assembly.GetEntryAssembly().GetManifestResourceStream(script.Resource))
            {
                if (stream == null)
                {
                    throw new InvalidOperationException(String.Format("Ресурс {0} со скриптом не найден.", script.Resource));
                }
                StreamReader reader = new StreamReader(stream);
                sqlScript = reader.ReadToEnd();
            }

            int predictedCount = Regex.Matches(sqlScript, ";").Count;

            logger.Debug("Предполагаем наличие {0} команд в скрипте.", predictedCount);
            progressDlg.OperationText      = String.Format("Создаем базу <{0}>", dbname);
            progressDlg.OperationPartCount = predictedCount + (needDropBase ? 2 : 1);
            progressDlg.OperationCurPart   = 0;

            if (needDropBase)
            {
                logger.Info("Удаляем существующую базу {0}.", dbname);
                progressDlg.OperationText = String.Format("Удаляем существующую базу {0}", dbname);
                cmd.CommandText           = String.Format("DROP DATABASE `{0}`", dbname);
                cmd.ExecuteNonQuery();
                progressDlg.OperationCurPart++;
            }

            cmd.CommandText = String.Format("CREATE SCHEMA `{0}` DEFAULT CHARACTER SET utf8 ;", dbname);
            cmd.ExecuteNonQuery();
            cmd.CommandText = String.Format("USE `{0}` ;", dbname);
            cmd.ExecuteNonQuery();

            progressDlg.OperationText = String.Format("Создаем таблицы в <{0}>", dbname);
            progressDlg.OperationCurPart++;

            var myscript = new MySqlScript(connectionDB, sqlScript);

            myscript.StatementExecuted += Myscript_StatementExecuted;;
            var commands = myscript.Execute();

            logger.Debug("Выполнено {0} SQL-команд.", commands);

            progressDlg.Destroy();
            progressDlg = null;

            MessageDialogWorks.RunInfoDialog("Создание базы успешно завершено.\nЗайдите в программу под администратором для добавления пользователей.");
        }