void ChangePassword() { logger.Info("Отправляем новый пароль на сервер..."); if (Session.IsSaasConnection) { ISaaSService svc = Session.GetSaaSService(); if (!svc.changeUserPasswordByLogin(entryLogin.Text, Session.Account, entryPassword.Text)) { logger.Error("Ошибка установки пароля!"); } else { logger.Info("Пароль изменен. Ok"); } } else { string sql; try { QSMain.CheckConnectionAlive(); sql = "SET PASSWORD FOR @login = PASSWORD(@password)"; MySqlCommand cmd = new MySqlCommand(sql, QSMain.connectionDB); cmd.Parameters.AddWithValue("@login", entryLogin.Text); cmd.Parameters.AddWithValue("@password", entryPassword.Text); cmd.ExecuteNonQuery(); cmd.CommandText = "SET PASSWORD FOR @login @'localhost' = PASSWORD(@password)"; cmd.ExecuteNonQuery(); logger.Info("Пароль изменен. Ok"); } catch (Exception ex) { logger.Error(ex, "Ошибка установки пароля!"); QSMain.ErrorMessage(this, ex); } } }
protected void OnButtonOkClicked(object sender, EventArgs e) { NewPassword = entryPassword.Text; if (WorkMode == Mode.Manual) { return; } if (Session.IsSaasConnection) { ISaaSService svc = Session.GetSaaSService(); if (svc == null || !svc.changeUserPasswordBySessionId(Session.SessionId, NewPassword)) { logger.Error("Ошибка установки пароля!"); return; } logger.Info("Пароль изменен."); } else { logger.Info("Отправляем новый пароль на сервер..."); string sql; sql = "SET PASSWORD = PASSWORD('" + entryPassword.Text + "')"; try { QSMain.CheckConnectionAlive(); DbCommand cmd = QSMain.ConnectionDB.CreateCommand(); cmd.CommandText = sql; cmd.ExecuteNonQuery(); logger.Info("Пароль изменен. Ok"); } catch (Exception ex) { logger.Error(ex, "Ошибка установки пароля!"); QSMain.ErrorMessage(this, ex); } } }
protected void OnButtonOkClicked(object sender, EventArgs e) { NewPassword = entryPassword.Text; if (WorkMode == Mode.Manual) { return; } if (Session.IsSaasConnection) { ISaaSService svc = Session.GetSaaSService(); if (svc == null || !svc.changeUserPasswordBySessionId(Session.SessionId, NewPassword)) { logger.Error("Ошибка установки пароля!"); return; } logger.Info("Пароль изменен."); } else { logger.Info("Отправляем новый пароль на сервер..."); string sql; try { var reg = new Regex("password=(.+?)(;|$)"); QSMain.CheckConnectionAlive(); DbCommand cmd = QSMain.ConnectionDB.CreateCommand(); cmd.CommandText = "SELECT version();"; var version = (string)cmd.ExecuteScalar(); logger.Debug("Server version: " + version); if (version.EndsWith("-MariaDB")) { sql = "SET PASSWORD = PASSWORD('" + entryPassword.Text + "')"; } else if (Version.Parse(version) >= new Version(8, 0, 13)) { var match = reg.Match(QSMain.ConnectionString); string oldPassword = match.Success ? match.Groups[1].Value : null; sql = $"SET PASSWORD='******' REPLACE '{oldPassword}';"; } else { sql = "SET PASSWORD = PASSWORD('" + entryPassword.Text + "')"; } cmd.CommandText = sql; cmd.ExecuteNonQuery(); logger.Info("Пароль изменен. Ok"); //Заменяем пароль с текущей строке одключения, для того чтобы при переподключении не было ошибок //и чтобы при смене пароля еще раз был текущий пароль. QSMain.ConnectionString = reg.Replace(QSMain.ConnectionString, $"password={entryPassword.Text};"); } catch (Exception ex) { logger.Error(ex, "Ошибка установки пароля!"); QSMain.ErrorMessage(this, ex); } } }
public static void SubscribeToUnhadledExceptions() { AppDomain.CurrentDomain.UnhandledException += delegate(object sender, UnhandledExceptionEventArgs e) { logger.Fatal((Exception)e.ExceptionObject, "Поймано необработаное исключение в Application Domain."); QSMain.ErrorMessage((Exception)e.ExceptionObject); }; GLib.ExceptionManager.UnhandledException += delegate(GLib.UnhandledExceptionArgs a) { logger.Fatal((Exception)a.ExceptionObject, "Поймано необработаное исключение в GTK."); QSMain.ErrorMessage((Exception)a.ExceptionObject); }; }
protected void OnButtonSaveOrdinalClicked(object sender, EventArgs e) { int[] Numbers = new int[RefListStore.IterNChildren()]; int n = 0; foreach (object[] row in RefListStore) { Numbers[n] = (int)row[OrdinalColumn]; n++; } Array.Sort(Numbers); string sql = String.Format("UPDATE {0} SET {1} = @ord WHERE id = @id", TableRef, _OrdinalField); DbCommand cmd; DbTransaction trans = QSMain.ConnectionDB.BeginTransaction(); QSMain.CheckConnectionAlive(); try { n = 0; cmd = QSMain.ConnectionDB.CreateCommand(); DbParameter paramId = cmd.CreateParameter(); paramId.ParameterName = "@id"; cmd.Parameters.Add(paramId); DbParameter paramOrd = cmd.CreateParameter(); paramOrd.ParameterName = "@ord"; cmd.Parameters.Add(paramOrd); cmd.CommandText = sql; cmd.Prepare(); foreach (object[] row in RefListStore) { if (Numbers[n] != (int)row[OrdinalColumn]) { paramId.Value = row[0]; paramOrd.Value = Numbers[n]; cmd.ExecuteNonQuery(); } n++; } trans.Commit(); UpdateList(); } catch (Exception ex) { trans.Rollback(); logger.Error(ex, "Ошибка записи последовательности в {0}!", nameRef); QSMain.ErrorMessage(this, ex); } }
void ChangePassword() { logger.Info("Отправляем новый пароль на сервер..."); if (Session.IsSaasConnection) { ISaaSService svc = Session.GetSaaSService(); if (!svc.changeUserPasswordByLogin(entryLogin.Text, Session.Account, entryPassword.Text)) { logger.Error("Ошибка установки пароля!"); } else { logger.Info("Пароль изменен. Ok"); } } else { string sql; try { QSMain.CheckConnectionAlive(); sql = "SELECT version();"; MySqlCommand cmd = new MySqlCommand(sql, QSMain.connectionDB); var version = (string)cmd.ExecuteScalar(); logger.Debug("Server version: " + version); if (!version.EndsWith("-MariaDB") && Version.Parse(version) >= new Version(8, 0, 13)) { cmd.CommandText = "ALTER USER @login IDENTIFIED BY @password;"; cmd.Parameters.AddWithValue("@login", entryLogin.Text); cmd.Parameters.AddWithValue("@password", entryPassword.Text); cmd.ExecuteNonQuery(); } else { cmd.CommandText = "SET PASSWORD FOR @login = PASSWORD(@password)"; cmd.Parameters.AddWithValue("@login", entryLogin.Text); cmd.Parameters.AddWithValue("@password", entryPassword.Text); cmd.ExecuteNonQuery(); cmd.CommandText = "SET PASSWORD FOR @login @'localhost' = PASSWORD(@password)"; cmd.ExecuteNonQuery(); } logger.Info("Пароль изменен. Ok"); } catch (Exception ex) { logger.Error(ex, "Ошибка установки пароля!"); QSMain.ErrorMessage(this, ex); } } }
bool RenameLogin() { logger.Info("Переименование учетной записи на сервере..."); try { QSMain.CheckConnectionAlive(); //Проверка существует ли логин string sql = "SELECT COUNT(*) from mysql.user WHERE USER = @login"; MySqlCommand cmd = new MySqlCommand(sql, QSMain.connectionDB); cmd.Parameters.AddWithValue("@login", entryLogin.Text); try { if (Convert.ToInt32(cmd.ExecuteScalar()) > 0) { string Message = "Пользователь с логином " + entryLogin.Text + " уже существует на сервере. " + "Переименование невозможно."; MessageDialog md = new MessageDialog(this, DialogFlags.DestroyWithParent, MessageType.Error, ButtonsType.Ok, Message); md.Destroy(); return(false); } } catch (MySqlException ex) { if (ex.Number == 1045) { logger.Warn(ex, "Нет доступа к таблице пользователей, пробую создать пользователя в слепую."); } else { logger.Error(ex, "Ошибка чтения таблицы пользователей!"); QSMain.ErrorMessage(this, ex); return(false); } } //Переименование пользователя. sql = "RENAME USER @old_login TO @new_login, @old_login @'localhost' TO @new_login @'localhost'"; cmd = new MySqlCommand(sql, QSMain.connectionDB); cmd.Parameters.AddWithValue("@old_login", OriginLogin); cmd.Parameters.AddWithValue("@new_login", entryLogin.Text); cmd.ExecuteNonQuery(); logger.Info("Ok"); return(true); } catch (Exception ex) { logger.Error(ex, "Ошибка переименования пользователя!"); QSMain.ErrorMessage(this, ex); return(false); } }
protected void UpdateList() { logger.Info("Получаем таблицу справочника " + nameRef + "..."); entryFilter.Text = ""; QSMain.CheckConnectionAlive(); try { string sql = SqlSelect.Replace("@tablename", TableRef); DbCommand cmd = QSMain.ConnectionDB.CreateCommand(); cmd.CommandText = sql; using (DbDataReader rdr = cmd.ExecuteReader()) { RefListStore.Clear(); object[] Values = new object[RefListStore.NColumns]; while (rdr.Read()) { Values[0] = rdr.GetInt32(0); object[] Fields = new object[rdr.FieldCount]; rdr.GetValues(Fields); for (int i = 1; i < Columns.Count; i++) { Values[i] = String.Format(Columns[i].DisplayFormat, Fields); } if (_OrdinalField != "") { Values[OrdinalColumn] = rdr.GetInt32(rdr.GetOrdinal(_OrdinalField)); } RefListStore.AppendValues(Values); } } logger.Info("Ok"); } catch (Exception ex) { logger.Error(ex, "Ошибка получения таблицы!"); QSMain.ErrorMessage(this, ex); } OnTreeviewrefCursorChanged((object)treeviewref, EventArgs.Empty); TestOrdinalChanged(); }
public void UserFill(int UserId) { NewUser = false; logger.Info("Запрос пользователя №{0}...", UserId); string sql = "SELECT * FROM users WHERE users.id = @id"; try { QSMain.CheckConnectionAlive(); MySqlCommand cmd = new MySqlCommand(sql, QSMain.connectionDB); cmd.Parameters.AddWithValue("@id", UserId); MySqlDataReader rdr = cmd.ExecuteReader(); rdr.Read(); bool deactivated = false; string email = String.Empty; try { deactivated = DBWorks.GetBoolean(rdr, "deactivated", false); email = DBWorks.GetString(rdr, "email", String.Empty); } catch { } entryID.Text = rdr["id"].ToString(); entryLogin.Text = rdr["login"].ToString(); //Если SaaS - запретить редактировать логин. entryLogin.Sensitive = !Session.IsSaasConnection; OriginLogin = rdr["login"].ToString(); entryName.Text = rdr["name"].ToString(); entryPassword.Text = passFill; entryEmail.Text = email; checkDeactivated.Active = deactivated; checkDeactivated.Sensitive = QSMain.User.Login != OriginLogin; checkAdmin.Active = rdr.GetBoolean(QSMain.AdminFieldName); if (deactivated && Session.IsSaasConnection) //FIXME Очень странное условие. Нужно разобраться. Что делает этот блок и зачем? { entryName.Sensitive = entryPassword.Sensitive = entryEmail.Sensitive = false; checkDeactivated.Sensitive = checkAdmin.Sensitive = false; } foreach (KeyValuePair <string, CheckButton> Pair in RightCheckButtons) { Pair.Value.Active = rdr.GetBoolean(QSMain.ProjectPermission[Pair.Key].DataBaseName); } if (permissionViews != null) { foreach (var view in permissionViews) { view.DBFieldValue = DBWorks.GetString(rdr, view.DBFieldName); } } textviewComments.Buffer.Text = rdr["description"].ToString(); rdr.Close(); this.Title = entryName.Text; logger.Info("Ok"); } catch (Exception ex) { logger.Error(ex, "Ошибка получения информации о пользователе!"); QSMain.ErrorMessage(this, ex); } }
void UpdatePrivileges() { logger.Info("Устанавливаем права..."); try { string privileges; if (checkAdmin.Active) { privileges = "ALL"; } else { privileges = "SELECT, INSERT, UPDATE, DELETE, EXECUTE, SHOW VIEW"; } string sql = $"GRANT {privileges} ON `{QSMain.connectionDB.Database}`.* TO @login, @login @'localhost'"; QSMain.CheckConnectionAlive(); MySqlCommand cmd = new MySqlCommand(sql, QSMain.connectionDB); cmd.Parameters.AddWithValue("@login", entryLogin.Text); cmd.ExecuteNonQuery(); if (checkAdmin.Active) { cmd.CommandText = "GRANT CREATE USER, GRANT OPTION ON *.* TO @login, @login @'localhost'"; } else { cmd.CommandText = "REVOKE CREATE USER, GRANT OPTION ON *.* FROM @login, @login @'localhost'"; } cmd.ExecuteNonQuery(); bool GrantMake = false; if (checkAdmin.Active) { sql = "GRANT SELECT, UPDATE ON mysql.* TO @login, @login @'localhost'"; GrantMake = true; } else { sql = "SHOW GRANTS FOR @login"; cmd = new MySqlCommand(sql, QSMain.connectionDB); cmd.Parameters.AddWithValue("@login", entryLogin.Text); using (MySqlDataReader rdr = cmd.ExecuteReader()) { while (rdr.Read()) { if (rdr[0].ToString().IndexOf("mysql") > 0) { GrantMake = true; } } } sql = "REVOKE SELECT, UPDATE ON mysql.* FROM @login, @login @'localhost'"; } if (GrantMake) { cmd = new MySqlCommand(sql, QSMain.connectionDB); cmd.Parameters.AddWithValue("@login", entryLogin.Text); cmd.ExecuteNonQuery(); } logger.Info("Права установлены. Ok"); } catch (MySqlException ex) when(ex.Number == 1044) { logger.Error(ex, "Ошибка установки прав!"); MessageDialogWorks.RunErrorDialog("У вас не достаточно прав на сервере MySQL для установки полномочий другим пользователям. Возможно некоторые права не были установлены."); } catch (Exception ex) { logger.Error(ex, "Ошибка установки прав!"); QSMain.ErrorMessage(this, ex); } }
bool CreateLogin() { logger.Info("Создание учетной записи на сервере..."); try { //Проверка существует ли логин string sql = "SELECT COUNT(*) FROM users WHERE login = @login"; QSMain.CheckConnectionAlive(); MySqlCommand cmd = new MySqlCommand(sql, QSMain.connectionDB); cmd.Parameters.AddWithValue("@login", entryLogin.Text); if (Convert.ToInt32(cmd.ExecuteScalar()) > 0) { string Message = "Пользователь с логином " + entryLogin.Text + " уже существует в базе. " + "Создание второго пользователя с таким же логином невозможно."; MessageDialog md = new MessageDialog(this, DialogFlags.DestroyWithParent, MessageType.Warning, ButtonsType.Ok, Message); md.Run(); md.Destroy(); return(false); } sql = "SELECT COUNT(*) from mysql.user WHERE USER = @login"; cmd = new MySqlCommand(sql, QSMain.connectionDB); cmd.Parameters.AddWithValue("@login", entryLogin.Text); try { if (Convert.ToInt32(cmd.ExecuteScalar()) > 0) { string Message = "Пользователь с логином " + entryLogin.Text + " уже существует на сервере. " + "Если он использовался для доступа к другим базам, может возникнуть путаница. " + "Использовать этот логин?"; MessageDialog md = new MessageDialog(this, DialogFlags.DestroyWithParent, MessageType.Warning, ButtonsType.YesNo, Message); bool result = (ResponseType)md.Run() == ResponseType.Yes; md.Destroy(); return(result); } } catch (MySqlException ex) { if (ex.Number == 1045) { logger.Warn(ex, "Нет доступа к таблице пользователей, пробую создать пользователя в слепую."); } else { return(false); } } //Создание пользователя. sql = "CREATE USER @login IDENTIFIED BY @password"; cmd = new MySqlCommand(sql, QSMain.connectionDB); cmd.Parameters.AddWithValue("@login", entryLogin.Text); cmd.Parameters.AddWithValue("@password", entryPassword.Text); cmd.ExecuteNonQuery(); cmd.CommandText = "CREATE USER @login @'localhost' IDENTIFIED BY @password"; cmd.ExecuteNonQuery(); logger.Info("Ok"); return(true); } catch (Exception ex) { logger.Error(ex, "Ошибка создания пользователя!"); QSMain.ErrorMessage(this, ex); return(false); } }
protected void OnButtonOkClicked(object sender, EventArgs e) { string sql; ISaaSService svc = null; if (entryLogin.Text == "root") { string Message = "Операции с пользователем root запрещены."; MessageDialog md = new MessageDialog(this, DialogFlags.DestroyWithParent, MessageType.Warning, ButtonsType.Ok, Message); md.Run(); md.Destroy(); return; } if (Session.IsSaasConnection) { int dlgRes; svc = Session.GetSaaSService(); if (NewUser) { //Проверка существует ли логин sql = "SELECT COUNT(*) FROM users WHERE login = @login"; QSMain.CheckConnectionAlive(); MySqlCommand cmd = new MySqlCommand(sql, QSMain.connectionDB); cmd.Parameters.AddWithValue("@login", entryLogin.Text); if (Convert.ToInt32(cmd.ExecuteScalar()) > 0) { string Message = "Пользователь с логином " + entryLogin.Text + " уже существует в базе. " + "Создание второго пользователя с таким же логином невозможно."; MessageDialog md = new MessageDialog(this, DialogFlags.DestroyWithParent, MessageType.Warning, ButtonsType.Ok, Message); md.Run(); md.Destroy(); return; } //Регистрируем пользователя в SaaS Result result = svc.registerUserV3(entryLogin.Text, entryPassword.Text, Session.SessionId, entryName.Text, entryEmail.Text); if (!result.Success) { if (result.Error == ErrorType.UserExists) { MessageDialog md = new MessageDialog(this, DialogFlags.DestroyWithParent, MessageType.Warning, ButtonsType.YesNo, "Пользователь с таким логином уже существует. Предоставить ему доступ к базе?\n" + "ВНИМАНИЕ: Если вы указали новый пароль для пользователя, то он применен не будет."); dlgRes = md.Run(); md.Destroy(); if ((ResponseType)dlgRes == ResponseType.No) { return; } } else { MessageDialog md = new MessageDialog(this, DialogFlags.DestroyWithParent, MessageType.Warning, ButtonsType.Close, result.Description); md.Run(); md.Destroy(); return; } } //Создаем запись в Users. sql = "INSERT INTO users (name, login, deactivated, email, " + QSMain.AdminFieldName + ", description" + QSMain.GetPermissionFieldsForSelect() + GetExtraFieldsForSelect() + ") " + "VALUES (@name, @login, @deactivated, @email, @admin, @description" + QSMain.GetPermissionFieldsForInsert() + GetExtraFieldsForInsert() + ")"; } else { if (entryPassword.Text != passFill) { MessageDialog md = new MessageDialog(this, DialogFlags.DestroyWithParent, MessageType.Warning, ButtonsType.YesNo, "Изменение пароля произойдет во всех базах, к которым пользователь имеет доступ.\nПродолжить?"); dlgRes = md.Run(); md.Destroy(); if ((ResponseType)dlgRes == ResponseType.Yes && !svc.changeUserPasswordByLogin(entryLogin.Text, Session.Account, entryPassword.Text)) { MessageDialog md1 = new MessageDialog(this, DialogFlags.DestroyWithParent, MessageType.Warning, ButtonsType.Close, "Ошибка изменения пароля пользователя."); md1.Run(); md1.Destroy(); return; } else if ((ResponseType)dlgRes != ResponseType.Yes) { return; } } sql = "UPDATE users SET name = @name, deactivated = @deactivated, email = @email, " + QSMain.AdminFieldName + " = @admin," + "description = @description " + QSMain.GetPermissionFieldsForUpdate() + GetExtraFieldsForUpdate() + " WHERE id = @id"; } } else { if (NewUser) { if (!CreateLogin()) { return; } sql = "INSERT INTO users (name, login, deactivated, email, " + QSMain.AdminFieldName + ", description" + QSMain.GetPermissionFieldsForSelect() + GetExtraFieldsForSelect() + ") " + "VALUES (@name, @login, @deactivated, @email, @admin, @description" + QSMain.GetPermissionFieldsForInsert() + GetExtraFieldsForInsert() + ")"; } else { if (OriginLogin != entryLogin.Text && !RenameLogin()) { return; } if (entryPassword.Text != passFill) { ChangePassword(); } sql = "UPDATE users SET name = @name, deactivated = @deactivated, email = @email, login = @login, " + QSMain.AdminFieldName + " = @admin," + "description = @description " + QSMain.GetPermissionFieldsForUpdate() + GetExtraFieldsForUpdate() + " WHERE id = @id"; } UpdatePrivileges(); logger.Info("Запись пользователя..."); } try { QSMain.CheckConnectionAlive(); MySqlCommand cmd = new MySqlCommand(sql, QSMain.connectionDB); cmd.Parameters.AddWithValue("@id", entryID.Text); cmd.Parameters.AddWithValue("@name", entryName.Text); cmd.Parameters.AddWithValue("@login", entryLogin.Text); cmd.Parameters.AddWithValue("@admin", checkAdmin.Active); cmd.Parameters.AddWithValue("@deactivated", checkDeactivated.Active); cmd.Parameters.AddWithValue("@email", entryEmail.Text); foreach (KeyValuePair <string, CheckButton> Pair in RightCheckButtons) { cmd.Parameters.AddWithValue("@" + QSMain.ProjectPermission[Pair.Key].DataBaseName, Pair.Value.Active); } if (permissionViews != null) { foreach (var view in permissionViews) { cmd.Parameters.AddWithValue(view.DBFieldName, view.DBFieldValue); } } if (textviewComments.Buffer.Text == "") { cmd.Parameters.AddWithValue("@description", DBNull.Value); } else { cmd.Parameters.AddWithValue("@description", textviewComments.Buffer.Text); } cmd.ExecuteNonQuery(); if (QSMain.User.Login == entryLogin.Text) { QSMain.User.LoadUserInfo(); } logger.Info("Ok"); Respond(ResponseType.Ok); } catch (Exception ex) { logger.Error(ex, "Ошибка записи пользователя!"); QSMain.ErrorMessage(this, ex); } //Предоставляем пользователю доступ к базе if (Session.IsSaasConnection) { if (!svc.changeBaseAccessFromProgram(Session.SessionId, entryLogin.Text, Session.SaasBaseName, !checkDeactivated.Active, checkAdmin.Active)) { MessageDialog md = new MessageDialog(this, DialogFlags.DestroyWithParent, MessageType.Warning, ButtonsType.Close, "Ошибка предоставления доступа к базе данных."); md.Run(); md.Destroy(); return; } } }
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(); }
void on_editnode_response(object obj, ResponseArgs args) { if (args.ResponseId == ResponseType.Ok) { logger.Info("Запись " + nameNode + "..."); string sql, InsertDescriptString, UpdateDescriptString; if (DescriptionField) { if (ParentFieldName == "") { InsertDescriptString = " (name, description) VALUES (@name, @descript)"; } else { InsertDescriptString = " (name, description, " + ParentFieldName + ") VALUES (@name, @descript, @parent)"; } UpdateDescriptString = ", description = @descript "; } else { if (ParentFieldName == "") { InsertDescriptString = " (name) VALUES (@name)"; } else { InsertDescriptString = " (name, " + ParentFieldName + ") VALUES (@name, @parent)"; } UpdateDescriptString = ""; } if (NewNode) { sql = "INSERT INTO " + TableRef + InsertDescriptString; } else { sql = "UPDATE " + TableRef + " SET name = @name " + UpdateDescriptString + "WHERE id = @id"; } QSMain.CheckConnectionAlive(); try { DbCommand cmd = QSMain.ConnectionDB.CreateCommand(); cmd.CommandText = sql; DbParameter param = cmd.CreateParameter(); param.ParameterName = "@id"; param.Value = SelectedID; cmd.Parameters.Add(param); param = cmd.CreateParameter(); param.ParameterName = "@name"; param.Value = inputNameEntry.Text; cmd.Parameters.Add(param); if (DescriptionField) { param = cmd.CreateParameter(); param.ParameterName = "@descript"; param.Value = inputDiscriptionEntry.Text; cmd.Parameters.Add(param); } if (ParentFieldName != "") { param = cmd.CreateParameter(); param.ParameterName = "@parent"; param.Value = ParentId; cmd.Parameters.Add(param); } cmd.ExecuteNonQuery(); if (NewNode && OrdinalField != "") { cmd = QSMain.ConnectionDB.CreateCommand(); cmd.CommandText = @"select last_insert_rowid()"; int ItemId = Convert.ToInt32(cmd.ExecuteScalar()); cmd = QSMain.ConnectionDB.CreateCommand(); cmd.CommandText = String.Format("UPDATE {0} SET {1} = @id WHERE id = @id", TableRef, OrdinalField); param = cmd.CreateParameter(); param.ParameterName = "@id"; param.Value = ItemId; cmd.Parameters.Add(param); cmd.ExecuteNonQuery(); } logger.Info("Ok"); } catch (Exception ex) { logger.Error(ex, "Ошибка записи {0}!", nameNode); QSMain.ErrorMessage(this, ex); } } }