///Добавить все изображения из папки. private void DirAdd() { const string initialPath = @"C:\"; string dirName = ""; if (!FBAFile.DirChoose(initialPath, out dirName)) { return; } const bool subDirectories = false; //Вложенные подпапки не проверяем. string[] files = FBAFile.FileFind(dirName, "*.*", subDirectories); const string imageFormat = ";.BMP;.JPG;.GIF;.PNG;"; var progress1 = new FormProgress("Загрузка", "Загрузка изображений в базу данных", files.Count()); progress1.Show(); for (int i = 0; i < files.Count(); i++) { string fileNameFull = files[i]; string format = Path.GetExtension(fileNameFull).ToUpper(); if (imageFormat.IndexOf(format, StringComparison.OrdinalIgnoreCase) < 0) { continue; } if (!ImageAdd(fileNameFull)) { return; } progress1.Inc(); //Thread.Sleep(1000); } progress1.Dispose(); ImageRefresh(); sys.SM("Bсе изображения успешно загружены в базу данных!", MessageType.Information); }
///Загрузить текст MSSQL запроса. private void FormParserLoad(object sender, EventArgs e) { FBAFile.FileReadTextObject(textQuery, FBAPath.PathSettings + "MSSQL.txt"); RefreshFiles(); sys.ConnectLocal(); progressBarParser.Value = 0; }
/// <summary> /// Создать таблицы парсера. /// Всего есть три таблицы модели данных: /// fbaEntity - все сущности. /// fbaAttribute - все атрибуты всех сущностей. /// fbaEntity - все таблицы всех сущностей. /// Но для работы парсера не очень удобно использовать эти три таблицы. Было бы удобнее, если бы вся информация была собрана в одной, или двух таблицах. /// В этом случае снижается сложность парсера и увеличивается скорость работы. Поэтому процедура ниже берёт эти три таблицы и на основе них создает две других таблицы, /// которые были бы удобнее для парсера. Парсер работает на этих таблицах. Это таблицы: fbaAttrParent, fbaEntityParser. /// В таблице fbaAttrParent есть вся информация по атрибутам и по таблицам с учетом вложенности сущностей в друг друга. /// Количество строк больше чем в fbaAttribute. /// Таблица fbaEntityParser - это по сути та-же самая fbaEntity, но добавлены столбца в которых проставлено имя главной таблицы парсера и другая информация по главной таблице. Количество строк такое-же как и в fbaEntity. /// </summary> /// <returns>Если успешно, то true</returns> public static bool CreateParserLocalTables() { string sql = ""; int lineCount = 0; string fileName = ""; if (Var.con.serverTypeRemote == ServerType.MSSQL) { fileName = "ParserPrepareMSSQL.txt"; } if (Var.con.serverTypeRemote == ServerType.SQLite) { fileName = "ParserPrepareSQLite.txt"; } if (fileName == "") { sys.SM("Тип сервера " + Var.con.serverTypeRemote.ToString() + " не поддерживается!", MessageType.Error); return(false); } if (!FBAFile.FileReadText(FBAPath.PathSettings + fileName, true, out sql, out lineCount)) { return(false); } var DS = new System.Data.DataSet(); if (!sys.SelectDS(DirectionQuery.Remote, sql, out DS)) { return(false); } sys.SM("Таблицы для парсера MSQL созданы!", MessageType.Information); return(true); }
/// <summary> /// Сохранить все файлы программы на сервере. /// </summary> /// <param name="uploadToServer"></param> /// <returns></returns> private bool UpdateUpload(bool uploadToServer) { bool doUserUpdate = false; if (uploadToServer) { if (!(sys.SM("Сохранить файлы программы на сервере для обновления?", MessageType.Question, "Загрузка обновления на сервер"))) { return(false); } doUserUpdate = sys.SM("Это обновление для пользователей?", MessageType.Question, "Загрузка обновления на сервер"); } string[] ContentList = FBAFile.FilesInFolder(FBAPath.PathDebug, "*.*", "", "", true, true, true);; System.Data.DataTable DT; bool Result = UpdateUploadFiles(out DT, ContentList, doUserUpdate, uploadToServer); //dgvUpdate.SetDataSource(DT); if (uploadToServer) { sys.SM("Файлы программы загружены на сервер. Версия " + Var.ApplicationVersion, MessageType.Information, "Загрузка на сервер"); } return(Result); }
//Обновить список MSQL запросов. private void RefreshFiles() { ListBox1.Items.Clear(); FBAFile.ListBoxLoadFiles(ListBox1, FBAPath.PathSettings, "*.*", "", "Result;SQL", false, false, false); if (ListBox1.Items.Count > 0) { ListBox1.SelectedIndex = 0; } }
/// <summary> /// Запуск EXE файла, который копирует файлы обновления, после того как они были загружены с сервера. /// После скачивания обновления текущей программой (это может быть ClientApp, Utility) /// запускается эта процедура, которая запускает обновляльщик (Update.exe) и завершает текущую программу. /// Обновляльщик ждет некоторое время, если запущены какие либо exe файлы, /// то пытается остановить их работу и если все успешно, то копирует файлы обновления /// </summary> /// <returns>Если успешно, то true</returns> public static bool UpdateRun() { var fileName = FBAPath.PathMain + "Updater.exe"; Process run; if (!FBAFile.FileRunEXE(out run, fileName, Var.SystemName)) { return(false); } Environment.Exit(0); return(true); }
/// <summary> /// Выбрать файл /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void tbFileName_EditClick(object sender, EventArgs e) { //"CSV Files|*.csv|All Files|*.*" const string title = "Выбор шаблона отчета"; const string filter = "Office Files|*.XLS;*.XLSX;*.DOC;*.DOCX)|All files|*.*"; //формат загружаемого файла; string fileNameFull = ""; if (!FBAFile.OpenFileName(title, filter, "", ref fileNameFull)) { return; } tbFileName.Text = fileNameFull; tbFormat.Text = Path.GetExtension(fileNameFull).ToUpper(); }
/// <summary> /// Загрузка файла. /// </summary> /// <returns>Возвращает успешность или нет загрузки файла.</returns> private bool ImportFile() { //Выбор файла загрузки. string fileName = tbFileName.Text; if (!FBAFile.OpenFileName("Выбор файла для загрузки", "CSV Files|*.csv|Excel Files|*.xlsx|All Files|*.*", "", ref fileName)) { return(false); } tbFileName.Text = fileName; //Загрузка возможно из двух типов файлов xlsx и csv. string EXT = System.IO.Path.GetExtension(fileName).ToUpper(); if (EXT == ".XLSX") { fileType = "Excel"; } else if (EXT == ".CSV") { fileType = "CSV"; } else { sys.SM("Импорт из этого типа файла не поддерживается!"); return(false); } //Начать асинхронное добавление строк if (sys.IsEmpty(fileName)) { return(false); } //HACK - для того чтобы не было ошибки вызова обновления прогресс бара. т.к. компанент создан не в том потоке. System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false; if (fileType == "CSV") { LoadCSV(fileName); } if (fileType == "Excel") { LoadXLSX(fileName); } return(true); }
///Добавить одно изображение. private void ImageAdd() { const string title = "Выбор изображения"; const string filter = "Image Files(*.BMP;*.JPG;*.GIF;*.PNG)|*.BMP;*.JPG;*.GIF;*.PNG|All files (*.*)|*.*"; //формат загружаемого файла; string fileNameFull = ""; const string initialDirectory = ""; if (!FBAFile.OpenFileName(title, filter, initialDirectory, ref fileNameFull)) { return; } if (!ImageAdd(fileNameFull)) { return; } ImageRefresh(); sys.SM("Изображение успешно загружено!", MessageType.Information); }
/// <summary> /// Проверка наличия путей. При запуске клиента. /// </summary> /// <returns></returns> public static bool CheckPath() { if (!FBAFile.DirExists(FBAPath.PathApp, true)) { return(false); } if (!FBAFile.DirExists(FBAPath.PathAdditional, true)) { return(false); } if (!FBAFile.DirExists(FBAPath.PathLog, true)) { return(false); } if (!FBAFile.DirExists(FBAPath.PathTemp, true)) { return(false); } if (!FBAFile.DirExists(FBAPath.PathUpdate, true)) { return(false); } if (!FBAFile.DirExists(FBAPath.PathRollback, true)) { return(false); } if (!FBAFile.DirExists(FBAPath.PathSettings, true)) { return(false); } if (!FBAFile.DirExists(FBAPath.PathSQL, true)) { return(false); } if (!FBAFile.DirExists(FBAPath.PathForms, true)) { return(false); } if (!FBAFile.DirExists(FBAPath.PathTemplate, true)) { return(false); } return(true); }
///Загрузка файла с запросом. private void LoadFileSQL(string TestName) { if (TestName == "") { return; } string FileName = TestName + ".txt"; if (!FBAFile.FileReadTextObject(ListSQL, FBAPath.PathSettings + FileName)) { ListSQL.Text = ""; } FileName = TestName + "_Result.txt"; if (!FBAFile.FileReadTextObject(ListResult, FBAPath.PathSettings + FileName)) { ListResult.Text = ""; } }
///Загрузить картинку в БД. private bool ImageAdd(string FileNameFull) { string FileData = ""; string ErrorMes = ""; string ImageWidth = ""; string ImageHeight = ""; const bool ShowMes = true; if (!FBAFile.FileReadToBase64(FileNameFull, out FileData, out ErrorMes, ShowMes)) { return(false); } string ImageName = Path.GetFileNameWithoutExtension(FileNameFull); string ImageFileName = Path.GetFileName(FileNameFull); string Format = Path.GetExtension(ImageFileName).ToUpper(); try { var pictureBoxTemp = new FBA.PictureBoxFBA(); pictureBoxTemp.PictureBoxLoadFile(FileNameFull); ImageWidth = pictureBoxTemp.Image.Width.ToString(); ImageHeight = pictureBoxTemp.Image.Height.ToString(); } catch (Exception ex) { sys.SM("Ошибка при открытии изображения: " + FileNameFull + Var.CR + ex.Message); return(false); } string sql = "INSERT INTO fbaImage (" + "UserCreateID, DateCreate, Name, " + "FileName, FileNameFull, Image, " + "Width, Height, Format) " + "VALUES (" + Var.UserID + ", " + sys.DateTimeCurrent() + ",'" + ImageName + "'," + "'" + ImageFileName + "','" + FileNameFull + "','" + FileData + "'," + "'" + ImageWidth + "','" + ImageHeight + "','" + Format + "')"; if (!sys.Exec(DirectionQuery.Remote, sql)) { return(false); } return(true); }
/// <summary> /// Сохранить изображение /// </summary> private void ImageSave() { if (pictureBox1.Image == null) { return; } string fileName = "error.jpeg"; if (!FBAFile.SaveFileName("Сохранение изображения", "jpeg Files|*.jpeg;*.jpg|All Files (*.*)|*.*", "", 0, ref fileName)) { return; } try { pictureBox1.Image.Save(fileName); } catch (Exception ex) { sys.SM("Ошибка сохранения изображения в файл: " + fileName + Var.CR + ex.Message); } }
/* * //Показать путь к файлу в темповой папке. * if (SenderName == "btnReportPath") * { * if (tbFileNameFull.Text == "") return; * try * { * string FileNamePath = Path.GetDirectoryName(tbFileNameFull.Text); * System.Diagnostics.Process.Start(FileNamePath); * } * catch { } * }*/ ///Показ шаблона отчета. private void SelectReport() { string ReportID = dgvReport.Value("ID"); if (ReportID == "") { return; } string FileName; string FileData; string sql = "SELECT FileName, FileData FROM fbaReport WHERE ID = " + ReportID; if (!sys.GetValue(DirectionQuery.Remote, sql, out FileName, out FileData )) { return; } if (FileData == "") { sys.SM("Не найден шаблон отчета!"); return; } string ErrorMes; string FileNameTemp = FBAPath.PathTemp + FileName; if (!FBAFile.FileWriteFromBase64(FileData, FileNameTemp, out ErrorMes, true)) { return; } if (!File.Exists(FileNameTemp)) { sys.SM("Не найден шаблон отчета на диске. Имя файла: " + FileNameTemp); return; } FBAFile.FileRunSimple(FileNameTemp, ""); }
/// <summary> /// Загрузить шаблон отчета в БД. /// </summary> /// <returns></returns> private bool ReportInsert() { string fileData = ""; string errorMes = ""; string reportFileNameFull = tbFileName.Text; const bool showMes = true; if (reportFileNameFull != "") { if (!FBAFile.FileReadToBase64(reportFileNameFull, out fileData, out errorMes, showMes)) { return(false); } } string reportName = tbName.Text; string reportBrief = tbBrief.Text; string reportFileName = Path.GetFileName(reportFileNameFull); string format = tbFormat.Text; string comment = tbComment.Text; string reportType = GetReportType(format); string SQL = "INSERT INTO fbaReport (" + "EntityID, DateCreate, UserCreateID, " + "Format, Brief, Name, " + "FileName, FileNameFull, FileData, " + "Comment, ReportType)" + "VALUES (" + "113," + sys.DateTimeCurrent() + "," + Var.UserID + "," + "'" + format + "','" + reportBrief + "','" + reportName + "'," + "'," + reportFileName + "','" + reportFileNameFull + "','" + fileData + "'," + "'," + comment + "','" + reportType + "')"; if (!sys.Exec(DirectionQuery.Remote, SQL)) { return(false); } return(true); }
/// <summary> /// Загрузить шаблон отчета в БД. /// </summary> /// <returns>Если успешно, то true</returns> private bool ReportUpdate() { string fileData = ""; string errorMes = ""; string reportFileNameFull = tbFileName.Text; const bool showMes = true; if (!FBAFile.FileReadToBase64(reportFileNameFull, out fileData, out errorMes, showMes)) { return(false); } string reportName = tbName.Text; string reportBrief = tbBrief.Text; string reportFileName = Path.GetFileName(reportFileNameFull); string format = tbFormat.Text; string comment = tbComment.Text; string reportType = GetReportType(format); string sql = "UPDATE fbaReport " + "SET " + "DateChange = " + sys.DateTimeCurrent() + ",UserChangeID = " + Var.UserID + ",Format = '" + format + "'" + ",Brief = '" + reportBrief + "'" + ",Name = '" + reportName + "'" + ",FileName = '" + reportFileName + "'" + ",FileNameFull = '" + reportFileNameFull + "'" + ",FileData = '" + fileData + "'" + ",Comment = '" + comment + "'" + ",ReportType = '" + reportType + "'" + " WHERE ID = " + ID; if (!sys.Exec(DirectionQuery.Remote, sql)) { return(false); } return(true); }
/// <summary> /// Послать ошибку на сервер. /// </summary> /// <param name="errorMes">Текст ошибки</param> /// <param name="additionalInfo">Дополнительная информация</param> public static bool SendErrorToServer(string errorMes, string additionalInfo) { //Выходим, если делать ничего не нужно. if (!SaveError) { return(false); } //Это для того чтобы если во время работы этого кода возникнет ошибка, не было зацикливания. SaveError = false; try { //Если чтение параметра неудачное, то ничего не делаем. var Params = new string[10]; //Получаем только при первой ошибке. if (ErrorsCount == 0) { if (Param.Load(DirectionQuery.Remote, Var.UserID, "SaveError", true, "User", out Params)) { if (!Params[0].Replace("SaveError=", "").ToBool()) { return(false); } SaveScreenshot = Params[1].Replace("SaveScreenshot=", "").ToBool(); CompressRatio = Params[2].Replace("CompressRatio=", "").ToInt(); SecBetweenSendError = Params[3].Replace("SecBetweenSendError=", "").ToInt(); } } //sys.Error.SaveError true/false: Сохранять ошибку на сервере или нет. Пример: SaveError=true //sys.Error.SaveScreenshot true/false: Сохранять текст ошибки на сервере или нет. Пример: SaveScreenshot=true //sys.Error.CompressRatio int: находится значение степени сжатия скриншота. По умолчанию формат JPEG, степень сжатия 90. Пример: CompressRatio=90 //sys.Error.SecBetweenSendError int: - количество секунд между ошибками. //sys.Error.LastDateTimeSendError datetime: Время последней ошибки. if (sys.GetSecDiff(LastDateTimeSendError, DateTime.Now) < SecBetweenSendError) { SaveError = true; return(false); } string imagebase64 = ""; string screenshoFormat = ""; string screenshotWidth = ""; string screenshotHeight = ""; string screenshotSize = ""; if (SaveScreenshot) { //Получение скриншота screenshoFormat = "WEBP"; screenshotWidth = Screen.PrimaryScreen.Bounds.Width.ToString(); screenshotHeight = Screen.PrimaryScreen.Bounds.Height.ToString(); Bitmap printscreen = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height); Graphics graphics = Graphics.FromImage(printscreen as Image); graphics.CopyFromScreen(0, 0, 0, 0, printscreen.Size); byte[] webpImageData; WebP.EncodeLossly(printscreen, CompressRatio, out webpImageData); imagebase64 = Convert.ToBase64String(webpImageData); screenshotSize = FBAFile.GetFileSizeStr(webpImageData.Length, true, false); } additionalInfo = sys.AddRightCR(additionalInfo); additionalInfo += GetSystemInfo(); string sql = "INSERT INTO fbaError (EntityID, UserID, ErrorTime, ErrorText, ScreenshotFormat, ScreenshotWidth, ScreenshotHeight, ScreenshotSize, " + "CompressRatio, AdditionalInfo, ScreenshotData) VALUES (" + Var.CR + "123, " + Var.UserID + "," + sys.DateTimeCurrent() + ",'" + errorMes + "','" + screenshoFormat + "','" + screenshotWidth + "','" + screenshotHeight + "'," + screenshotSize + ",'" + Error.CompressRatio.ToString() + "','" + additionalInfo + "','" + imagebase64 + "')"; sys.Exec(DirectionQuery.Remote, sql); LastDateTimeSendError = DateTime.Now; } catch { //Ошибку не выдаем. } SaveError = true; return(true); }
///Сохранить текст сообщения от клиента в файл. Сейчас не используется. public static string GetRequestFile(Encoding enc, string boundary, Stream input, string FileName) { Byte[] boundaryBytes = enc.GetBytes(boundary); Int32 boundaryLen = boundaryBytes.Length; string TempPath; if (!FBAFile.GetPathTemp(out TempPath)) { return("error creating temporary directory: " + TempPath); } string FullFileName = TempPath + FileName; using (var output = new FileStream(FullFileName, FileMode.Create, FileAccess.Write)) { var buffer = new Byte[1024]; Int32 len = input.Read(buffer, 0, 1024); Int32 startPos = -1; //Find start boundary while (true) { if (len == 0) { return("Start Boundaray Not Found"); } startPos = IndexOf(buffer, len, boundaryBytes); if (startPos >= 0) { break; } else { Array.Copy(buffer, len - boundaryLen, buffer, 0, boundaryLen); len = input.Read(buffer, boundaryLen, 1024 - boundaryLen); } } //Skip four lines (Boundary, Content-Disposition, Content-Type, and a blank) for (Int32 i = 0; i < 4; i++) { while (true) { if (len == 0) { return("Preamble not Found."); } startPos = Array.IndexOf(buffer, enc.GetBytes("\n")[0], startPos); if (startPos >= 0) { startPos++; break; } else { len = input.Read(buffer, 0, 1024); } } } Array.Copy(buffer, startPos, buffer, 0, len - startPos); len = len - startPos; while (true) { Int32 endPos = IndexOf(buffer, len, boundaryBytes); if (endPos >= 0) { if (endPos > 0) { output.Write(buffer, 0, endPos - 2); } break; } else if (len <= boundaryLen) { return("End Boundaray Not Found"); } else { output.Write(buffer, 0, len - boundaryLen); Array.Copy(buffer, len - boundaryLen, buffer, 0, boundaryLen); len = input.Read(buffer, boundaryLen, 1024 - boundaryLen) + boundaryLen; } } } return("Success"); }
/// <summary> /// Событие. Удаление файлов кэша. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void BtnDeleteDLLClick(object sender, EventArgs e) { string[] listNotDeleted; FBAFile.DirClean(FBAPath.PathApp, out listNotDeleted, true); }
///Список SQL запросов. private void BtnSQL1Click(object sender, EventArgs e) { //Добавить. if (sender == btnSQL1) { string FileName = ""; if (!sys.InputValue("Название запроса", "Введите название запроса:", SizeMode.Small, ValueType.String, ref FileName)) { return; } ListBox1.Items.Add(FileName); ListSQL.Text = ""; ListBox1.SelectedIndex = ListBox1.Items.Count - 1; } //Удалить. if (sender == btnSQL2) { string FileName = ListBox1.Items[ListBox1.SelectedIndex].ToString(); string ErrorMes = ""; if (!FBAFile.FileDelete(FBAPath.PathSettings + FileName + ".txt", out ErrorMes, true)) { return; } FBAFile.FileDelete(FBAPath.PathSettings + FileName + "_Result.txt", out ErrorMes, true); ListBox1.Items.RemoveAt(ListBox1.SelectedIndex); } //Сохранить. if (sender == btnSQL3) { if (ListBox1.SelectedIndex == -1) { sys.SM("Выберите запрос!"); return; } string FileName = ListBox1.Items[ListBox1.SelectedIndex].ToString(); FBAFile.FileWriteTextObject(ListSQL, FBAPath.PathSettings + FileName + ".txt", false); FBAFile.FileWriteTextObject(ListResult, FBAPath.PathSettings + FileName + "_Result.txt", false); } //Использовать. if (sender == btnSQL4) { textQuery.Text = ListSQL.Text; tabControl1.SelectedIndex = 1; } //Тест только парсинг. if (sender == btnSQL5) { RunTest(false, "Test"); } //Тест парсинг и выполнение. if (sender == btnSQL6) { RunTest(true, "Test"); } //Тест парсинг и выполнение. if (sender == btnSQL9) { RunTest(true, "WORK"); } //Переименование. if (sender == btnSQL7) { string fileName = ListBox1.Items[ListBox1.SelectedIndex].ToString(); string fileSource1 = FBAPath.PathSettings + fileName + ".txt"; string fileSource2 = FBAPath.PathSettings + fileName + "_Result.txt"; const bool showMes = true; string errorMes = ""; if (!sys.InputValue("Новое название запроса", "Введите новое название запроса:", SizeMode.Small, ValueType.String, ref fileName)) { return; } string fileDestination1 = FBAPath.PathSettings + fileName + ".txt"; string fileDestination2 = FBAPath.PathSettings + fileName + "_Result.txt"; //Переименование файла. FileExists = (Overwrite, Skip, Ask) if (File.Exists(fileSource1)) { if (!FBAFile.FileRename(fileSource1, fileDestination1, FileOverwrite.Ask, showMes, out errorMes)) { return; } } if (File.Exists(fileSource2)) { if (!FBAFile.FileRename(fileSource2, fileDestination2, FileOverwrite.Ask, showMes, out errorMes)) { return; } } sys.SM("Запрос переименован!", MessageType.Information); } //Кнопка "Обновить список MSQL запросов". if (sender == btnSQL8) { RefreshFiles(); } }
///Загрузить все. private void LoadAll() { FBAFile.FileReadTextObject(tbTextSQLite, FBAPath.PathAdditional + "NewDatabase_SQLite.sql"); FBAFile.FileReadTextObject(tbTextPostgre, FBAPath.PathAdditional + "NewDatabase_Postgre.sql"); FBAFile.FileReadTextObject(tbTextMSSQL, FBAPath.PathAdditional + "NewDatabase_MSSQL.sql"); }
///Показ изображения. private void SelectImage() { string ImageID = dgvImage.Value("ID"); if (ImageID == "") { return; } string FileData; string ImageName; string FileName; string FileNameFull; string Format; string ImageWidth; string ImageHeight; string SQL = "SELECT Image, Name, FileName, FileNameFull, " + "Format, Width, Height " + "FROM fbaImage WHERE ID = " + ImageID; if (!sys.GetValue(DirectionQuery.Remote, SQL, out FileData, out ImageName, out FileName, out FileNameFull, out Format, out ImageWidth, out ImageHeight)) { return; } if (FileData == "") { sys.SM("Не найдено изображение в таблице изображений!"); return; } string ErrorMes; string FileNameTemp = FBAPath.PathTemp + FileName; if (!FBAFile.FileWriteFromBase64(FileData, FileNameTemp, out ErrorMes, true)) { return; } if (!File.Exists(FileNameTemp)) { sys.SM("Не найдено изображение на диске. Имя файла: " + FileNameTemp); return; } tbID.Text = ImageID; tbSize.Text = ImageWidth + "x" + ImageHeight; tbFormat.Text = Format; tbFileName.Text = FileName; tbFileNameFull.Text = FileNameFull; try { pictureBox1.PictureBoxLoadFile(FileNameTemp); ShowImage(); } catch (Exception ex) { sys.SM("Ошибка при открытии изображения: " + FileNameTemp + Var.CR + ex.Message); return; } }
/// <summary> /// Добавление новой вкладки для редактора запросов. /// </summary> /// <param name="indexError"></param> public void TabControlPageAdd(int indexError) { string fileName = Errors[indexError, 1]; int indexPage = GetTabIndexByTagValue(fileName); if (indexPage > 0) { return; } string Code; int LinesCount; string FileNameFull = Errors[indexError, 4]; if (FileNameFull == null) { return; } if (!FBAFile.FileReadText(FileNameFull, true, out Code, out LinesCount)) { return; } tabControl1.TabPages.Add(fileName); indexPage = tabControl1.TabPages.Count - 1; System.Windows.Forms.TabPage tb = tabControl1.TabPages[indexPage]; tb.Tag = fileName; var fctb1 = new FastColoredTextBox(); tb.Controls.Add(fctb1); fctb1.Text = Code; fctb1.Dock = TextBoxCode.Dock; fctb1.AutoCompleteBrackets = TextBoxCode.AutoCompleteBrackets; fctb1.AutoScrollMinSize = TextBoxCode.AutoScrollMinSize; fctb1.BookmarkColor = TextBoxCode.BookmarkColor; fctb1.BracketsHighlightStrategy = TextBoxCode.BracketsHighlightStrategy; fctb1.Cursor = TextBoxCode.Cursor; fctb1.DisabledColor = TextBoxCode.DisabledColor; fctb1.FindEndOfFoldingBlockStrategy = TextBoxCode.FindEndOfFoldingBlockStrategy; fctb1.Font = TextBoxCode.Font; fctb1.Language = TextBoxCode.Language; fctb1.LeftBracket = TextBoxCode.LeftBracket; fctb1.RightBracket = TextBoxCode.RightBracket; //fctb1.Padding = TextBoxCode.Padding; fctb1.SelectionColor = Color.Red; //TextBoxCode.SelectionColor; fctb1.VirtualSpace = TextBoxCode.VirtualSpace; fctb1.Name = "textCode" + indexPage; fctb1.BackColor = TextBoxCode.BackColor; fctb1.CurrentLineColor = TextBoxCode.CurrentLineColor; fctb1.VirtualSpace = TextBoxCode.VirtualSpace; fctb1.BorderStyle = TextBoxCode.BorderStyle; fctb1.ReadOnly = true; int firstbookmark = 0; int countError = 0; for (int i = 0; i < countPage; i++) { if (Errors[i, 1] != fileName) { continue; } countError++; int N = Errors[i, 2].ToInt(false); if (firstbookmark == 0) { firstbookmark = N; } fctb1.BookmarkLine(N - 1); fctb1.Navigate(N - 1); fctb1.CurrentLineColor = Color.Red; tb.Text = fileName + " (" + countError + ")"; } SetCurrentBookmarkForFileName(fileName, firstbookmark); fctb1.Navigate(firstbookmark); }
///Сохранить текст MSSQL запроса. private void SaveMSQLText() { FBAFile.FileWriteTextObject(textQuery, FBAPath.PathSettings + "MSSQL.txt", false); }
/// <summary> /// Получить список файлов решения /// </summary> /// <returns></returns> private bool GetFilesFBA() { //Последняя версия в таблице обновлений. int numberUpdate = GetLastUpdate() + 1; //Новая версия. if (dt.Columns.Count == 0) { dt.Columns.Add("NumberFile"); //Порядковый номер файла или папки в обновлении dt.Columns.Add("NumberUpdate"); //Порядковый номер обновления. dt.Columns.Add("Version"); //Версия программы вида 1.0.6335.33362 dt.Columns.Add("FullName"); //Полное имя файла с путем. dt.Columns.Add("Path"); //Начальный каталог программы, т.е. sys.PathMain dt.Columns.Add("Name"); //Имя файла/папки dt.Columns.Add("Extension"); //Расширение файла (для папки здесь пусто) dt.Columns.Add("CreationTime"); //Дата создания папки/файла dt.Columns.Add("LastWriteTime"); dt.Columns.Add("LastAccessTime"); dt.Columns.Add("Size"); //размер файла в байтах. Для папки здесь 0. dt.Columns.Add("MD5"); //Хеш MD5 } dt.Rows.Clear(); string[] contentList = FBAFile.FilesInFolder(FBAPath.PathDebug, "*.*", "", "", true, true, true);; //Для вставки полей в DT. string numberFile = ""; string dateRecord = sys.DateTimeToSQLStr(DateTime.Now); string version = Var.ApplicationVersion; string fullName = ""; string filePath = ""; string fileName = ""; string extension = ""; string creationTime = ""; string lastWriteTime = ""; string lastAccessTime = ""; long SizeFile; string hashMD5; var progress1 = new FormProgress("Обновление", "Получение свойств файлов", contentList.Length); progress1.Show(); var fileprop = new string[dt.Columns.Count]; for (int i = 0; i < contentList.Length; i++) { try { fullName = contentList[i]; if (string.IsNullOrEmpty(fullName)) { continue; } if (!File.Exists(fullName)) { continue; } var file = new FileInfo(fullName); filePath = file.DirectoryName; fileName = file.Name; numberFile = (i + 1).ToString(); extension = file.Extension; creationTime = sys.DateTimeToSQLStr(file.CreationTime); lastWriteTime = sys.DateTimeToSQLStr(file.LastWriteTime); lastAccessTime = sys.DateTimeToSQLStr(file.LastAccessTime); SizeFile = file.Length; hashMD5 = Crypto.FileHashMD5Calc(fullName); fileprop[0] = numberFile; fileprop[1] = numberUpdate.ToString(); fileprop[2] = version; fileprop[3] = fullName; fileprop[4] = filePath;; fileprop[5] = fileName; fileprop[6] = extension; fileprop[7] = creationTime; fileprop[8] = lastWriteTime; fileprop[9] = lastAccessTime; fileprop[10] = SizeFile.ToString(); fileprop[11] = hashMD5; DataRow row = dt.NewRow(); row.ItemArray = fileprop; dt.Rows.Add(row); progress1.Inc(); } catch (Exception ex) { sys.SM("File Number " + numberFile + Var.CR + "File name: " + fullName + Var.CR + ex.Message); continue; } } const bool ff = true; Type tp = ff.GetType(); dt.Columns.Add("Check", tp); //Выбрать файл для заливки dt.Columns["Check"].SetOrdinal(0); CheckFiles(false); //dt.Columns[0].DataType = tp; progress1.Close(); return(true); }
/// <summary> /// Загрузка обновления на сервер. /// </summary> /// <returns></returns> private bool UploadNewUpdate() { string version = dt.Value("Version"); if (!DeleteUpdate(version)) { return(false); } string fileName = ""; string sql = ""; var progress1 = new FormProgress("Обновление", "Загрузка файлов обновления на сервер", dt.Rows.Count); progress1.Show(); for (int i = 0; i < dt.Rows.Count; i++) { try { string fullName = dt.Value(i, "FullName"); if (!File.Exists(fullName)) { continue; } string fileData; string errorMes; const bool showMes = true; bool check = dt.Value(i, 0).ToBool(); if (!check) { continue; } string numberFile = progress1.Progress.ToString(); string numberUpdate = dt.Value(i, "NumberUpdate"); string dateRecord = sys.GetDateTimeNow(); string userUpdate = Var.UserID.ToString(); const string contentType = ""; const string operation = ""; string path = dt.Value(i, "Path"); fileName = dt.Value(i, "Name"); string extension = dt.Value(i, "Extension"); string creationTime = dt.Value(i, "CreationTime"); string lastWriteTime = dt.Value(i, "LastWriteTime"); string lastAccessTime = dt.Value(i, "LastAccessTime"); string sizeFile = dt.Value(i, "Size"); string hashMD5 = dt.Value(i, "MD5"); if (!FBAFile.FileReadToBase64(fullName, out fileData, out errorMes, showMes)) { return(false); } sql = @"INSERT INTO fbaUpdate (NumberFile, NumberUpdate, DateRecord, UserUpdate, " + "ContentType, Operation, Version, CurrentVersion, FullName, Path, Name, Extension, " + "CreationTime, LastWriteTime, LastAccessTime, Size, MD5, " + "FileData) " + "VALUES (" + "'" + numberFile + "','" + numberUpdate + "','" + dateRecord + "','" + userUpdate + "'," + "'" + contentType + "','" + operation + "','" + version + "','" + version + "','" + fullName + "','" + path + "','" + fileName + "','" + extension + "'," + "'" + creationTime + "','" + lastWriteTime + "','" + lastAccessTime + "'," + sizeFile.ToString() + ", '" + hashMD5 + "'," + "'" + fileData + "'); " + Var.CR; if (!sys.Exec(DirectionQuery.Remote, sql)) { return(false); } } catch (Exception ex) { sys.SM("Ошибка загрузки файла обновления: " + Var.CR + fileName + Var.CR + ex.Message); } progress1.Inc(); } //В конце загрузки файлов на сервер обновляем информцию о текущей версии. sql = @"UPDATE fbaUpdate SET CurrentVersion = '" + version + "'; " + Var.CR; if (!sys.Exec(DirectionQuery.Remote, sql)) { return(false); } progress1.Dispose(); return(true); }
/// <summary> /// Проверить неоходимость обновления и скачать обновление программы. /// Обновление работает так: /// Для того чтобы скачать обновление и обновиться нужно обновление закачать на сервер. /// Обновление exe файлов и других файлов клиента возможно только из рабочей базы данных. /// Обновление из файловой шары или из ресурса в интернете не сделано. /// Закачивает обновление на сервер программа Utility.exe. /// В её коде присаны все файлы, папки, которые нужно закачать на сервер. /// Там же указывается список папок или файлов, котороые подлежат удалению. /// Все файлы закачиваются на сервер в табличку fbaUpdate. В обновлении участвует только одна табличка. /// После этого при запуске Клиент обращается к этой табличку и смотрит, есть ли обновление (проверка по полю Version и CurrentVersion) /// Сравниваеся с текущей версии EXE файла. Если обновить нужно, то все файлы скачиваются клиентом в папку Update, предназначенную для этого. /// Перед скачиванием папка Update очищается полностью. /// Далее клиент запускает файл Updater.exe передавая в параметрах свое имя файла, а сам завершает работу. /// Updater.exe полностью независимый EXE, он независит от других файлов программы. Updater.exe заменяет файлы программы файлами из папки Update, /// Если при копировании происходит ошибка, то он пытается вернуть прежние версии файлов. После копирования он запускает EXE файл, /// имя которого было передано в параметрах, а сам завершает работу. /// Download - true - скачать файлы обновления, false - только получить данные об обновлении. /// ResultUpdate - описание выполненых действий. /// </summary> /// <param name="version"></param> /// <param name="numberUpdate"></param> /// <param name="resultMessage"></param> /// <param name="needUpdate"></param> /// <param name="showMes">false - тихий режим, сообщений пользователю не выдаем. </param> /// <returns>Результат - true - требуется обновить, false - обновление не требуется.</returns> public static bool UpdateDownload(string version, string numberUpdate, out string resultMessage, out bool needUpdate, bool showMes) { resultMessage = ""; DataTable dT1; DataTable dT2; string sqlLocal; long fileSize = 0; var fileCount = 0; var listDelete = new List <string>(); string[] listNotDeleted; //Очищаем полность папку sys.PathUpdate. if (!FBAFile.DirClean(FBAPath.PathUpdate, out listNotDeleted, true)) { needUpdate = false; return(false); } sqlLocal = "select ID, MD5, Path, FullName, ContentType, Operation, Size from fbaUpdate WHERE Version = '" + version + "' ORDER BY Numberupdate, Numberfile; "; sys.SelectDT(DirectionQuery.Remote, sqlLocal, out dT1); if (dT1.Rows.Count == 0) { resultMessage = ""; //Ошибка обновления. Не удается найти последниюю версию приложения!"; needUpdate = false; return(false); } var progress = new FormProgress("Обновление программы", "Получение файлов для обновления", dT1.Rows.Count); if (showMes) { progress.Show(); } for (var i = 0; i < dT1.Rows.Count; i++) { var id = dT1.Value(i, "ID"); var md5Update = dT1.Value(i, "MD5"); var pathValue = dT1.Value(i, "Path"); var fullName = dT1.Value(i, "FullName"); var contentType = dT1.Value(i, "ContentType"); var operationL = dT1.Value(i, "Operation"); var size = dT1.Value(i, "Size"); var fileNameLocal = fullName.Replace(pathValue, FBAPath.PathMain); var FileNameUpdate = fullName.Replace(pathValue, FBAPath.PathUpdate); if (operationL == "DELFILE" || operationL == "DELDIR") { listDelete.Add(operationL + ": " + fullName); } if (operationL == "ADDDIR") { Directory.CreateDirectory(Path.GetDirectoryName(FileNameUpdate)); } if (operationL == "ADDFILE") { var MD5Local = Crypto.FileHashMD5Calc(fileNameLocal); //MD5 локального файла. var MD5Download = Crypto.FileHashMD5Calc(FileNameUpdate); //MD5 уже скаченного ранее файла. //Если рабочий файл не совпадает с обновлением: if (md5Update != MD5Local) { fileSize = fileSize + Convert.ToInt64(size); fileCount = fileCount + 1; //Если MD5 не совпадает между локальным файлом и файлом для обновления, то скачиваем файл. sqlLocal = "SELECT FileData FROM fbaUpdate WHERE ID = " + id; sys.SelectDT(DirectionQuery.Remote, sqlLocal, out dT2); var FileData = dT2.Value("FileData"); Directory.CreateDirectory(Path.GetDirectoryName(FileNameUpdate)); if (!FBAFile.FileWriteFromBase64(FileData, FileNameUpdate, out resultMessage, showMes)) { resultMessage = "Ошибка обновления. Не удается найти последниюю версию приложения!" + Var.CR + resultMessage; needUpdate = false; return(false); } } } if (listDelete.Count > 0) { //Просто сохраняем в список то, что нужно удалить. var fileName = FBAPath.PathUpdate + "ListDelete.txt"; var listStr = string.Join(Var.CR, listDelete.ToArray()); File.WriteAllText(fileName, listStr, Encoding.Default); } if (showMes) { progress.Inc(); } } progress.Dispose(); if (fileCount == 0 && listDelete.Count == 0) { resultMessage = "Обновление не требуется. Все текущие версии файлов совпадают с файлами обновления " + version; needUpdate = false; return(true); } //Если нужно только удалить папки или файлы, то ставим размер обновления 1 кб, //чтобы не пугать пользователя. if (fileSize == 0) { fileSize = 1024; } var ResStr = "Порядковый номер обновления: " + numberUpdate + Var.CR + "Версия: " + version + Var.CR + "Размер обновления: " + FBAFile.GetFileSizeStr(fileSize, true, true) + Var.CR + "Количество файлов и папок: " + (fileCount + listDelete.Count) + Var.CR + "Текущая версия программы: " + Var.ApplicationVersion; resultMessage = "Файлы для обновления скачаны и готовы для установки." + Var.CR + ResStr; needUpdate = true; return(true); //true - обновлять нужно, false - обновление не требуется. }
//Показывает список доступных обновлений. //Сохранить все файлы программы на сервере. // //UserUpdate - обновление доступно пользователям. //Upload - Загрузить файлы на сервер. //ContentList - Cписок файлов и папок для обновления в определенном формате: // ADDDIR: CustomDorectoryName // DELDIR: CustomDorectoryName // ADDFILE: CustomFileName.txt // DELFILE: CustomFileName.txt /// <summary> /// /// </summary> /// <param name="dt"></param> /// <param name="contentList"></param> /// <param name="doUserUpdate"></param> /// <param name="uploadToServer"></param> /// <returns></returns> private bool UpdateUploadFiles(out System.Data.DataTable dt, string[] contentList, bool doUserUpdate, bool uploadToServer) { dt = new System.Data.DataTable(); string sql = ""; //Для вставки полей в DT. string numberFile; int numberUpdate; string dateRecord = sys.DateTimeToSQLStr(DateTime.Now); string userUpdate = (!doUserUpdate).ToInt().ToString(); string contentType = ""; string operation = ""; string version = Var.ApplicationVersion; string fullName = ""; string path = FBAPath.PathMain; string fileName = ""; string extension = ""; string creationTime; string lastWriteTime; string lastAccessTime; long SizeFile; string hashMD5; string fileData = ""; //Данные в Base64. //Последняя версия в таблице обновлений. sql = "SELECT MAX(NumberUpdate) AS NumberVersion FROM fbaUpdate; "; string NumberUpdateStr = sys.GetValue(DirectionQuery.Remote, sql); if (NumberUpdateStr == "") { NumberUpdateStr = "0"; } numberUpdate = NumberUpdateStr.ToInt() + 1; //Новая варсия. bool ff = true; Type tp = ff.GetType(); dt.Columns.Add("Check", tp); //Выбрать файл для заливки dt.Columns.Add("NumberFile"); //Порядковый номер файла или папки в обновлении dt.Columns.Add("NumberUpdate"); //Порядковый номер обновления. dt.Columns.Add("DateRecord"); //Текущая дата. dt.Columns.Add("UserUpdate"); //true-Пользователям нужно обновляться из это обновления. false-не нужно. false-нужно для тестирования, для отложенного обновления и др. dt.Columns.Add("ContentType"); //1-папка, 2-файл dt.Columns.Add("Operation"); //1-создать, 2-удалить. dt.Columns.Add("Version"); //Версия программы вида 1.0.6335.33362 dt.Columns.Add("FullName"); //Полное имя файла с путем. dt.Columns.Add("Path"); //Начальный каталог программы, т.е. sys.PathMain dt.Columns.Add("Name"); //Имя файла/папки dt.Columns.Add("Extension"); //Расширение файла (для папки здесь пусто) dt.Columns.Add("CreationTime"); //Дата создания папки/файла dt.Columns.Add("LastWriteTime"); dt.Columns.Add("LastAccessTime"); dt.Columns.Add("Size"); //размер файла в байтах. Для папки здесь 0. dt.Columns.Add("MD5"); //Хеш MD5 //DT.Columns.Add("FileData"); //Содержимое файла в кодировке Base64. sql = "DELETE FROM fbaUpdate WHERE Version = '" + version + "'; "; if (!sys.Exec(DirectionQuery.Remote, sql)) { return(false); } var fileprop = new string[16]; var progress1 = new FormProgress("Обновление", "Получение свойств файлов", contentList.Length); progress1.Show(); for (int i = 0; i < contentList.Length; i++) { fullName = contentList[i]; numberFile = (i + 1).ToString(); if (!File.Exists(fileName)) { continue; } var file = new FileInfo(fullName); fileName = file.Name; extension = file.Extension; creationTime = sys.DateTimeToSQLStr(file.CreationTime); lastWriteTime = sys.DateTimeToSQLStr(file.LastWriteTime); lastAccessTime = sys.DateTimeToSQLStr(file.LastAccessTime); SizeFile = file.Length; hashMD5 = Crypto.FileHashMD5Calc(fullName); fileprop[0] = numberFile; fileprop[1] = numberUpdate.ToString(); fileprop[2] = dateRecord; fileprop[3] = userUpdate; fileprop[4] = ""; //ContentType.ToString(); fileprop[5] = ""; //Operation.ToString(); fileprop[6] = version; fileprop[7] = fullName; fileprop[8] = path; fileprop[9] = fileName; fileprop[10] = extension; fileprop[11] = creationTime; fileprop[12] = lastWriteTime; fileprop[13] = lastAccessTime; fileprop[14] = SizeFile.ToString(); fileprop[15] = hashMD5; DataRow row = dt.NewRow(); row.ItemArray = fileprop; dt.Rows.Add(row); if (uploadToServer) { fileData = ""; string errorMes; const bool showMes = true; if (!FBAFile.FileReadToBase64(fullName, out fileData, out errorMes, showMes)) { return(false); } const bool saveHashToEndFile = false; if (!FBAFile.FileGetBase64WithHashMD5(fileName, saveHashToEndFile, out fileData, out hashMD5)) { return(false); } sql = @"INSERT INTO fbaUpdate (NumberFile, NumberUpdate, DateRecord, UserUpdate, " + "ContentType, Operation, Version, CurrentVersion, FullName, Path, Name, Extension, " + "CreationTime, LastWriteTime, LastAccessTime, Size, MD5, " + "FileData) " + "VALUES (" + "'" + numberFile + "','" + numberUpdate + "','" + dateRecord + "','" + userUpdate + "'," + "'" + contentType + "','" + operation + "','" + version + "','" + version + "','" + fullName + "','" + path + "','" + fileName + "','" + extension + "'," + "'" + creationTime + "','" + lastWriteTime + "','" + lastAccessTime + "'," + SizeFile.ToString() + ", '" + hashMD5 + "'," + "'" + fileData + "'); " + Var.CR; if (!sys.Exec(DirectionQuery.Remote, sql)) { return(false); } } progress1.Inc(); } //В конце загрузки файлов на сервер обновляем информцию о текущей версии. if (uploadToServer) { sql = @"UPDATE fbaUpdate SET CurrentVersion = '" + version + "'; " + Var.CR; if (!sys.Exec(DirectionQuery.Remote, sql)) { return(false); } } progress1.Dispose(); return(true); }
///Событие. Главное меню. private void MainMenu_N1_1Click(object sender, EventArgs e) { if (sender == MainMenu_N1_1) { Environment.Exit(0); } if (sender == MainMenu_N2_3) { System.Diagnostics.Process.Start(FBAPath.PathAdditional + @"ColorTable.html"); } if (sender == MainMenu_N2_4) { new FormReg().Show(); } if (sender == MainMenu_N2_5) { System.Diagnostics.Process.Start(FBAPath.PathAdditional + @"ASCII.html"); } if (sender == MainMenu_N2_6) { System.Diagnostics.Process.Start(FBAPath.PathAdditional + @"DataTimeFormat.html"); } if (sender == MainMenu_N2_8) { FBAFile.FileRunEXESimple(FBAPath.PathMain + @"Updater.exe"); } if (sender == MainMenu_N2_9) { FBAFile.FileRunEXESimple(FBAPath.PathMain + @"ServerApp.exe"); } if (sender == MainMenu_N2_10) { FBAFile.FileRunEXESimple(FBAPath.PathMain + @"ClientApp.exe"); } if (sender == MainMenu_N4_2) { new FormAbout().Show(); } if (sender == MainMenu_N2_13) { new FormGrant().Show(); } if (sender == MainMenu_N2_15) { new FormDDL().Show(); } if (sender == MainMenu_N2_16) { new FormModel().Show(); } if (sender == MainMenu_N2_17) { new FormSQL().Show(); } if (sender == MainMenu_N2_18) { new FormUpdate().Show(); } if (sender == MainMenu_N2_19) { new FormImage().Show(); } if (sender == MainMenu_N2_20) { new FormText().Show(); } if (sender == MainMenu_N2_21) { new FormParam().Show(); } if (sender == MainMenu_N2_22) { new FormStatus().Show(); } if (sender == MainMenu_N3_1) { new FormConList().Show(); } if (sender == MainMenu_N2_23) { new ProjectService("").Show(); } //Выбор шрифт всех форм. if (sender == MainMenu_N3_2) { if (fontDialog1.ShowDialog() == DialogResult.OK) { Var.font1 = fontDialog1.Font; } } if (sender == MainMenu_N3_3) { string Path = ""; if (!FBAFile.DirChoose(Application.StartupPath, out Path)) { return; } sys.ShowSolutionStringCodeCount(Path); } //Сущности. if (sender == MainMenu_N2_24) { sys.ShowDirectorySimple("Entity", "", "", "", null, "SELECT * FROM fbaEntity", ""); } //Атрибуты. if (sender == MainMenu_N2_25) { sys.ShowDirectorySimple("Attribute", "", "", "", null, "SELECT * FROM fbaAttribute", ""); } //Таблицы. if (sender == MainMenu_N2_26) { sys.ShowDirectorySimple("Table", "", "", "", null, "SELECT * FROM fbaTable", ""); } //Шаблоны отчетов. if (sender == MainMenu_N2_27) { new FormReport().Show(); } if (sender == MainMenu_N2_7) { System.Diagnostics.Process.Start(@"https://docs.microsoft.com/ru-ru/dotnet/api/system.windows.media.brushes?view=netcore-3.0"); } //Ошибки пользователей. if (sender == MainMenu_N2_28) { new FormError().Show(); } //Справка if (sender == MainMenu_N4_1) { sys.ShowHelp(); } //Help.ShowHelp(this, sys.PathHelp); //Форма для добавления методов сущностей. if (sender == MainMenu_N2_29) { new FormMethod().Show(); } }
///Событие. Кнопки редактора запросов private void TbSQL1Click(object sender, EventArgs e) { string indexstr = tabControlSQL1.SelectedTab.Tag.ToString(); //FastColoredTextBox f; //var textSQL11 = tabControSQL.Controls.Find("sdF"). var textSQL = (FastColoredTextBox)tabControlSQL1.Controls.Find("textSQL" + indexstr, true).First(); var dgvSQL = (DataGridViewFBA)tabControlSQL1.Controls.Find("dgvSQL" + indexstr, true).First(); //textSQL1 var fastColoredTextBoxSQL = (FastColoredTextBoxNS.FastColoredTextBox)tabControlSQL1.Controls.Find("fastColoredTextBoxSQL" + indexstr, true).First(); if ((sender == textSQL) && (textSQL.Text == "")) { textSQL.AppendText("SELECT * FROM fbaEnterHist"); } //Выполнить запрос. if (sender == tbSQL1) { var tbSQLResult = (TextBox)tabControlSQL1.Controls.Find("tbSQLResult" + indexstr, true).First(); string SQL = textSQL.SelectedText; if (SQL == "") { SQL = textSQL.Text; } string ExecTextSQL = SQL; if (cb_MSQL_SQL.Checked) { ExecTextSQL = sys.Parse(SQL); } DateTime DateTime1 = DateTime.Now; sys.RefreshGrid(GetDirection(), dgvSQL, ExecTextSQL); tbSQLResult.Text = " Rows: " + dgvSQL.RowCount + " Execute time: " + sys.GetTimeDiff(DateTime1, DateTime.Now); } //Распарсить запрос. if (sender == tbSQL7) { var tbSQLResult = (TextBox)tabControlSQL1.Controls.Find("tbSQLResult" + indexstr, true).First(); string SQL = textSQL.SelectedText; if (SQL == "") { SQL = textSQL.Text; } string ExecTextSQL = SQL; DateTime DateTime1 = DateTime.Now; if (cb_MSQL_SQL.Checked) { ExecTextSQL = sys.Parse(SQL); } fastColoredTextBoxSQL.Text = ExecTextSQL; tbSQLResult.Text = " Execute time: " + sys.GetTimeDiff(DateTime1, DateTime.Now); } //Очистка редактора запросов if (sender == tbSQL2) { textSQL.Clear(); } //Export to Excel if (sender == cm4) { dgvSQL.ExportToExcel(); } //Новая вкладка. //В процедуру передаются компоненты с перовой вкладки (которая никогда не удаляется) //чтобы на их примере сделать новую вкладку. //Можно было бы и без них - но тогда пришлось бы каждый раз в коде изменять свойства компонентов. if (sender == tbSQL3) { TabControlPageAdd(tabControlSQL1, splitContainerSQL1, textSQL, pnlResultSQL1, tbSQLResult1, dgvSQL1, cmGrid, ref TabIndexSQL); } //Удалить вкладку if ((sender == tbSQL4) && (tabControlSQL1.TabPages.Count > 1)) { tabControlSQL1.SelectedTab.Dispose(); } //Открыть из CSV. if (sender == tbSQL5) { string FileName = ""; string ErrorMes = ""; const bool ErrorShow = true; const string InitialDirectory = ""; if (!FBAFile.OpenFileName("", "CSV Files|*.csv|All Files|*.*", InitialDirectory, ref FileName)) { return; } System.Data.DataTable DT; sys.CSVToDataTable(out DT, FileName, out ErrorMes, ErrorShow); dgvSQL.DataSource = DT; } //Сохранить текст запроса. if (sender == tbSQL6) { string FileName = ""; if (!FBAFile.SaveFileName("Save SQL", "SQL Files|*.sql|All Files|*.*", "", 0, ref FileName)) { return; } FBAFile.FileWriteTextObject(textSQL, FileName, true); } //Copy to Remote Database if (sender == cm1) { string SQL; string ServerTableName = "MyTableName"; //if (Var.con.serverTypeRemote == ServerType.MSSQL) ServerTableName = "dbo.MyTableName"; if (!sys.InputValue("Имя таблицы на сервере", "Имя таблицы", SizeMode.Small, ValueType.String, ref ServerTableName)) { return; } var DT = (DataTable)dgvSQL.DataSource; if (Var.con.serverTypeRemote == ServerType.MSSQL) { //Способ Var.con.MSSQLCopyTableToServer работает быстрее для MSSQL, чем sys.GetTextTableToDatabase. Var.con.MSSQLCopyTableToServer(DT, ServerTableName); } if (Var.con.serverTypeRemote == ServerType.Postgre) { SQL = sys.GetTextTableToDatabase(Var.con.serverTypeRemote, ServerTableName, DT, true); sys.Exec(DirectionQuery.Remote, SQL); } sys.SM("Таблица " + ServerTableName + " загружена на сервер " + Var.con.serverType, MessageType.Information); } //Copy to Local Database if (sender == cm2) { string ServerTableName = "MyTableName"; if (!sys.InputValue("Имя таблицы на сервере", "Имя таблицы", SizeMode.Small, ValueType.String, ref ServerTableName)) { return; } var DT = (DataTable)dgvSQL.DataSource; string SQL = sys.GetTextTableToDatabase(ServerType.SQLite, ServerTableName, DT, true); Var.conLite.Exec(SQL); sys.SM("Таблица " + ServerTableName + " сохранена в локальной базе данных SQLite", MessageType.Information); } //Export to CSV if (sender == cm3) { string FileName = "Table_" + sys.GetDate4FileName(DateTime.Now) + ".csv"; var DT = (DataTable)dgvSQL.DataSource; const string InitialDirectory = ""; if (!FBAFile.SaveFileName("Import object", "XLS Files|*.xls|All Files|*.*", InitialDirectory, 0, ref FileName)) { return; } if (!sys.DataTableToCSV(DT, FileName, true)) { return; } //sys.SM("Таблица сохранена в файл: " + FileName, MessageType.Information); //sys.FileRunSimple(FileName); FBAFile.FileRunNotebook(FileName); } //Export to XLS if (sender == cm4) { var DT = (DataTable)dgvSQL.DataSource; if (!sys.DataTableToExcel(DT)) { return; } sys.SM("Таблица выгружена в файл XLS", MessageType.Information); } }