/// <summary> /// Иницирует процесс проверки административных прав /// </summary> /// <param name="dcr">Описывает строку соединения и тип версию SQL-сервера</param> /// <returns></returns> public bool logAdmin(ref CDbCreator dcr) { fdcr = dcr; ShowDialog(); dcr = fdcr; return(isLog); }
/// <summary> /// Создаёт новую базу InCome либо только прописывает в реестре строку соединения с базой /// </summary> /// <remarks>Предварительно запускает процедуру автризации пользователя</remarks> private void btnNewDB_Click(object sender, System.EventArgs e) { fmAdminLog adminLog = new fmAdminLog(); if (adminLog.logAdmin(ref dcr) == true) { //если пересоздаем базу if (MessageBox.Show("Вы действительно хотите пересоздать базу InCome (при этом вся существующая информация будет потеряна, административный пароль изменится на стандартный)? Если да, удостоверьтесь, что база в данный момент никем не используется", "Предупреждение", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) == DialogResult.Yes) { dcr = new CDbCreator("SOFTWARE\\InCome"); if (dcr.setConStr() != true) //не задана строка соединения { MessageBox.Show("Не была задана строка соединения c MS SQL Server!", "Предупреждение", MessageBoxButtons.OK, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1); } else { Cursor = Cursors.WaitCursor; Refresh(); if (dcr.createDB() == false) { MessageBox.Show("Не удалось создать базу InCome на выбранном MS SQL Server. Приложение не может продолжать работать!", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1); this.Close(); return; } else //пишем в реестр строку соединения и версию { //подменяем пользователя и базу на стандартные int p1 = dcr.conStr.IndexOf("User ID="); int p2 = dcr.conStr.IndexOf("Data Source="); dcr.conStr = dcr.conStr.Replace(dcr.conStr.Substring(p1, p2 - p1), "User ID=InComeUser;Initial Catalog=InCome;"); if ((dcr.setRegValue("SOFTWARE\\InCome", "connection", dcr.conStr) == false) || (dcr.setRegValue("SOFTWARE\\InCome", "sqlver", Convert.ToString((int)dcr.sqlVer)) == false)) { MessageBox.Show("Не удалось записать настройки соединения с базой InCome в реестр. Попробуйте перезапустить приложение и повторить настройку!", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1); this.Close(); return; } MessageBox.Show("Создана база InCome!", "Сообщение", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1); } Cursor = Cursors.Default; Refresh(); } } else //если меняем только строку соединения if (MessageBox.Show("Вы хотите изменить строку соединения с базой?", "Предупреждение", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.Yes) { if (dcr.setConStr() != true) //не задана строка соединения { MessageBox.Show("Не была задана строка соединения c MS SQL Server!", "Предупреждение", MessageBoxButtons.OK, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1); } else //пишем в реестр строку соединения и версию { //подменяем пользователя и базу на стандартные int p1 = dcr.conStr.IndexOf("User ID="); int p2 = dcr.conStr.IndexOf("Data Source="); dcr.conStr = dcr.conStr.Replace(dcr.conStr.Substring(p1, p2 - p1), "User ID=InComeUser;Initial Catalog=InCome;"); if ((dcr.setRegValue("SOFTWARE\\InCome", "connection", dcr.conStr) == false) || (dcr.setRegValue("SOFTWARE\\InCome", "sqlver", Convert.ToString((int)dcr.sqlVer)) == false)) { MessageBox.Show("Не удалось записать настройки соединения с базой InCome в реестр. Попробуйте перезапустить приложение и повторить настройку!", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1); this.Close(); } MessageBox.Show("Строка соединения изменена!", "Сообщение", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1); } } } tbCode.Focus(); }
/// <summary> /// Обработчик события загрузки главной формы приложения /// </summary> /// <remarks>Проверяет реестр на наличие строки соединения с базой. В случае, когда строки соединения нет либо она задана неверно - предлагается проверить наличие базы InCome на сервере: </remarks> /// <remarks> - если базы нет, то создаётся новая</remarks> /// <remarks> - если база есть, то строка соединения записывается в реестр</remarks> private void fmMain_Load(object sender, System.EventArgs e) { dcr = new CDbCreator("SOFTWARE\\InCome"); if ((dcr.conStr == "") || (dcr.sqlVer == SqlVer.UNKNOWN) || (dcr.isDBase(dcr.conStr, dcr.sqlVer, "InCome") != 1)) //запустили впервые либо не задана строка соединения с базой { //задаём строку соединения с таблицей master MS SQL Server MessageBox.Show("Не была найдена строка соединения с базой InCome либо сама база. Возможно приложение запускается в первый раз на данном компьютере. Для определения наличия базы задайте строку соединения с базой master вашего MS SQL Server (при этом вы должны иметь административные права для записи в реестр)!", "Сообщение", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1); if (dcr.setConStr() != true) //не задана строка соединения { MessageBox.Show("Не была задана строка соединения. Приложение не может продолжать работу!", "Предупреждение", MessageBoxButtons.OK, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1); this.Close(); return; } else //задана строка соединения { //проверка, есть ли база int isBase = dcr.isDBase(dcr.conStr, dcr.sqlVer, "InCome"); bool crBase = false; switch (isBase) { case -1: if (MessageBox.Show("Не удалось установить, существует ли уже база InCome на заданном MS SQL Server! Создать базу заново (при этом существующая база, если она есть, будет удалена)? ", "Предупреждение", MessageBoxButtons.YesNo, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2) == DialogResult.Yes) { crBase = true; } break; case 0: if (MessageBox.Show("База InCome на заданном MS SQL Server не найдена! Создать базу заново? ", "Предупреждение", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) == DialogResult.Yes) { crBase = true; } else { MessageBox.Show("Приложение не может продолжать работу без базы InCome. Создайте базу на выбранном MS SQL Server либо укажите сервер, где она уже существует!", "Предупреждение", MessageBoxButtons.OK, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1); this.Close(); } break; case 1: if (MessageBox.Show("База InCome на заданном MS SQL Server уже существует! ", "Сообщение", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1) == DialogResult.Yes) { crBase = false; } break; } //если нужно создать базу if ((crBase == true) && ((isBase == -1) || (isBase == 0))) { Cursor = Cursors.WaitCursor; Refresh(); if (dcr.createDB() == false) { MessageBox.Show("Не удалось создать базу InCome на выбранном MS SQL Server. Приложение не может продолжать работать!", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1); this.Close(); return; } else //пишем в реестр строку соединения и версию { //подменяем пользователя и базу на стандартные int p1 = dcr.conStr.IndexOf("User ID="); int p2 = dcr.conStr.IndexOf("Data Source="); dcr.conStr = dcr.conStr.Replace(dcr.conStr.Substring(p1, p2 - p1), "User ID=InComeUser;Initial Catalog=InCome;"); if ((dcr.setRegValue("SOFTWARE\\InCome", "connection", dcr.conStr) == false) || (dcr.setRegValue("SOFTWARE\\InCome", "sqlver", Convert.ToString((int)dcr.sqlVer)) == false)) { MessageBox.Show("Не удалось записать настройки соединения с базой InCome в реестр. Попробуйте перезапустить приложение и повторить настройку!", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1); this.Close(); return; } MessageBox.Show("Создана база InCome!", "Сообщение", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1); } Cursor = Cursors.Default; Refresh(); } //если нужно только задать строку соединения и записать её в реестр else { MessageBox.Show("Для продолжения работы укажите строку соединения с базой InCome для пользователя InComeUser (при этом вы должны иметь административные права для записи в реестр)!", "Предупреждение", MessageBoxButtons.OK, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1); if (dcr.setConStr() != true) //не задана строка соединения { MessageBox.Show("Не была задана строка соединения. Приложение не может продолжать работу!", "Предупреждение", MessageBoxButtons.OK, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1); this.Close(); return; } if (CDbCreator.getUserCon(dcr.conStr).ToUpper() != "INCOMEUSER") { MessageBox.Show("Задан отличный от InComeUser пользователь базы InCome. Приложение не может продолжать работу!", "Предупреждение", MessageBoxButtons.OK, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1); this.Close(); return; } if ((dcr.setRegValue("SOFTWARE\\InCome", "connection", dcr.conStr) == false) || (dcr.setRegValue("SOFTWARE\\InCome", "sqlver", Convert.ToString((int)dcr.sqlVer)) == false)) { MessageBox.Show("Не удалось записать настройки соединения с базой InCome в реестр. Попробуйте перезапустить приложение и повторить настройку!", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1); this.Close(); return; } MessageBox.Show("Была задана строка соединения с базой InCome!", "Сообщение", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1); Refresh(); } } } refreshEmployees(); }