public static bool NHibernateStaleObjectStateExceptionHandler(Exception exception, IApplicationInfo application, UserBase user, IInteractiveMessage interactiveMessage) { var staleObjectStateException = ExceptionHelper.FindExceptionTypeInInner <NHibernate.StaleObjectStateException>(exception); if (staleObjectStateException != null) { var type = OrmConfig.FindMappingByFullClassName(staleObjectStateException.EntityName).MappedClass; var objectName = DomainHelper.GetSubjectNames(type); string message; switch (objectName?.Gender) { case GrammaticalGender.Feminine: message = "Сохраняемая <b>{0}</b> c номером <b>{1}</b> была кем то изменена."; break; case GrammaticalGender.Neuter: message = "Сохраняемое <b>{0}</b> c номером <b>{1}</b> было кем то изменено."; break; case GrammaticalGender.Masculine: default: message = "Сохраняемый <b>{0}</b> c номером <b>{1}</b> был кем то изменен."; break; } message = String.Format(message + "\nВаши изменения не будут записаны, чтобы не потерять чужие изменения. \nПереоткройте вкладку.", objectName?.Nominative ?? type.Name, staleObjectStateException.Identifier); interactiveMessage.ShowMessage(QS.Dialog.ImportanceLevel.Warning, message); return(true); } return(false); }
private void RunMicroUpdateOnly() { var currentDB = CurrentDBVersion; var beforeUpdates = currentDB; var hops = configuration.GetHopsToLast(currentDB).ToList(); logger.Info("Начинаем микро обновление(текущая версия:{0})", VersionHelper.VersionToShortString(currentDB)); foreach (var update in hops) { logger.Info("Обновляемся до {0}", VersionHelper.VersionToShortString(update.Destination)); var trans = connection.BeginTransaction(); try { string sql; using (Stream stream = update.Assembly.GetManifestResourceStream(update.Resource)) { if (stream == null) { throw new InvalidOperationException(String.Format("Ресурс {0} указанный в обновлениях не найден.", update.Resource)); } StreamReader reader = new StreamReader(stream); sql = reader.ReadToEnd(); } var cmd = connection.CreateCommand(); cmd.CommandText = sql; cmd.Transaction = trans; cmd.ExecuteNonQuery(); trans.Commit(); currentDB = update.Destination; } catch (Exception ex) { trans.Rollback(); throw ex; } } parametersService.micro_updates = VersionHelper.VersionToShortString(currentDB); interactiveMessage.ShowMessage(ImportanceLevel.Info, String.Format("Выполнено микро обновление базы {0} -> {1}.", VersionHelper.VersionToShortString(beforeUpdates), VersionHelper.VersionToShortString(currentDB))); }
public static bool NHibernateFlushAfterException(Exception exception, IApplicationInfo application, UserBase user, IInteractiveMessage interactiveMessage) { var nhEx = ExceptionHelper.FindExceptionTypeInInner <NHibernate.AssertionFailure>(exception); if (nhEx != null && nhEx.Message.Contains("don't flush the Session after an exception occurs")) { interactiveMessage.ShowMessage(ImportanceLevel.Error, "В этом диалоге ранее произошла ошибка, в следстивии ее программа не может " + "сохранить данные. Закройте этот диалог и продолжайте работу в новом."); return(true); } return(false); }
public static bool MySqlExceptionConnectionTimeoutHandler(Exception exception, IApplicationInfo application, UserBase user, IInteractiveMessage interactiveMessage) { var mysqlEx = ExceptionHelper.FindExceptionTypeInInner <MySqlException>(exception); var exceptions = new[] { 1159, 1161 }; if (mysqlEx != null && exceptions.Contains(mysqlEx.Number)) { interactiveMessage.ShowMessage(ImportanceLevel.Error, "Возникла проблема с подключением к серверу, попробуйте снова."); return(true); } return(false); }
public static bool MySqlException1055OnlyFullGroupBy(Exception exception, IApplicationInfo application, UserBase user, IInteractiveMessage interactiveMessage) { var mysqlEx = ExceptionHelper.FindExceptionTypeInInner <MySqlException>(exception); if (mysqlEx != null && mysqlEx.Number == 1055) { interactiveMessage.ShowMessage(ImportanceLevel.Error, "На сервере MariaDB\\MySQL включен режим 'only_full_group_by', " + "для нормальной работы программы нужно удалить это значение из опции sql_mode. Обычно по умолчанию этот режим " + "отключен, проверьте свой конфигурационный файл my.cnf"); return(true); } return(false); }
IPage MakePageAndCatchAborting(Func <string, IPage> makePage, string hash) { try { return(makePage(hash)); } catch (Exception ex) when(ex.FindExceptionTypeInInner <AbortCreatingPageException>() != null) { var abortEx = ex.FindExceptionTypeInInner <AbortCreatingPageException>(); interactiveMessage.ShowMessage(ImportanceLevel.Error, abortEx.Message, abortEx.Title); return(null); } }
public static bool MySqlException1366IncorrectStringValue(Exception exception, IApplicationInfo application, UserBase user, IInteractiveMessage interactiveMessage) { var mysqlEx = ExceptionHelper.FindExceptionTypeInInner <MySqlException>(exception); if (mysqlEx != null && mysqlEx.Number == 1366) { interactiveMessage.ShowMessage(ImportanceLevel.Error, "При сохранении в базу данных произошла ошибка «Incorrect string value», " + "обычно это означает что вы вставили в поле диалога какие-то символы не поддерживаемые текущей кодировкой поля таблицы. " + "Например вы вставили один из символов Эмодзи, при этом кодировка полей в таблицах у вас трех-байтовая utf8, " + "для того чтобы сохранять такие символы в MariaDB\\MySQL базу данных, вам необходимо преобразовать все таблицы в " + "четырех-байтовую кодировку utf8mb4. Кодировка utf8mb4 используется по умолчанию в новых версиях MariaDB."); return(true); } return(false); }
private void setInTablePerformers() { listPerformers = getPerformers(); List <CellRendererToggle> referActive = new List <CellRendererToggle>(); if (listPerformers.Count() > 3) { interactive.ShowMessage(ImportanceLevel.Warning, " Указано более трех исполнителей.\n Очистите график работ и проверьте,\n что в заказе не указаны лишние исполнители."); listPerformers.Clear(); } int i = 5; foreach (var emp in listPerformers) { getCellActive(ref referActive); var column = treeviewCost.AppendColumn(emp.PersonNameWithInitials(), referActive[i - 5], "active", i); column.Alignment = 0.5f; column.Expand = true; i++; } }
public void ShowMessage(ImportanceLevel level, string message, string title = null) { interactiveMessage.ShowMessage(level, message, title); }