private void cbTable_SelectedIndexChanged(object sender, EventArgs e) { // установка имени файла таблицы Tables.TableInfo tableInfo = cbTable.SelectedItem as Tables.TableInfo; if (tableInfo != null) { txtFileName.Text = DefaultDirectory + tableInfo.FileName; } }
private void btnImport_Click(object sender, EventArgs e) { // импорт выбранной таблицы из формата DAT if (AppData.Connected) { object selItem = cbTable.SelectedItem; string logFileName = AppData.AppDirs.LogDir + "ScadaAdminImport.txt"; bool importOK; bool logCreated; string msg; if (selItem is ImportAllTablesItem) { // импорт всех таблиц из директории importOK = ImportExport.ImportAllTables(txtFileName.Text, Tables.TableInfoList, logFileName, out logCreated, out msg); } else if (selItem is ImportArchiveItem) { // импорт архива importOK = ImportExport.ImportArchive(txtFileName.Text, Tables.TableInfoList, logFileName, out logCreated, out msg); } else { // импорт таблицы Tables.TableInfo tableInfo = (Tables.TableInfo)selItem; int minID = gbIDs.Enabled && chkStartID.Checked ? Convert.ToInt32(numStartID.Value) : 0; int maxID = gbIDs.Enabled && chkFinalID.Checked ? Convert.ToInt32(numFinalID.Value) : int.MaxValue; int newMinID = gbIDs.Enabled && chkNewStartID.Checked ? Convert.ToInt32(numNewStartID.Value) : 0; importOK = ImportExport.ImportTable(txtFileName.Text, tableInfo, minID, maxID, newMinID, logFileName, out logCreated, out msg); } // отображение сообщения о результате if (importOK) { ScadaUiUtils.ShowInfo(msg); } else { AppUtils.ProcError(msg); // отображение журнала в блокноте if (logCreated) { Process.Start(logFileName); } } } }
/// <summary> /// Экспортировать таблицу базы конфигурации в файл формата DAT /// </summary> public static bool ExportTable(Tables.TableInfo srcTableInfo, string destFileName, int minID, int maxID, out string msg) { try { // проверка аргументов метода if (srcTableInfo == null) { throw new ArgumentNullException("srcTableInfo"); } if (string.IsNullOrWhiteSpace(destFileName)) { throw new ArgumentException(AppPhrases.ExportFileUndefied); } string dir = Path.GetDirectoryName(destFileName); if (string.IsNullOrWhiteSpace(dir)) { throw new DirectoryNotFoundException(AppPhrases.ExportDirUndefied); } if (!Directory.Exists(dir)) { throw new DirectoryNotFoundException(AppPhrases.ExportDirNotExists); } // получение таблицы DataTable srcTable = srcTableInfo.GetTable(); // ограничение диапазона идентификаторов if ((0 < minID || maxID < int.MaxValue) && srcTableInfo.IDColName != "") { srcTable.DefaultView.RowFilter = string.Format("{0} <= {2} and {2} <= {1}", minID, maxID, srcTableInfo.IDColName); } // сохранение таблицы в формате DAT BaseAdapter adapter = new BaseAdapter(); adapter.FileName = destFileName; adapter.Update(srcTable); msg = AppPhrases.ExportCompleted; return(true); } catch (Exception ex) { msg = AppPhrases.ExportError + ":\r\n" + ex.Message; return(false); } }
private void cbTable_SelectedIndexChanged(object sender, EventArgs e) { // установка имени файла таблицы Tables.TableInfo tableInfo = cbTable.SelectedItem as Tables.TableInfo; if (tableInfo == null) { txtFileName.Text = DefaultDirectory + BaseDATArcFileName; gbIDs.Enabled = false; } else { txtFileName.Text = DefaultDirectory + tableInfo.FileName; gbIDs.Enabled = tableInfo.IDColName != ""; } }
private void btnImport_Click(object sender, EventArgs e) { // импорт выбранной таблицы из формата DAT Tables.TableInfo tableInfo = cbTable.SelectedItem as Tables.TableInfo; if (AppData.Connected) { string logFileName = chkImportLog.Checked ? AppData.ExeDir + "ScadaAdminImport.txt" : ""; bool importOK; bool logCreated; string msg; if (tableInfo == null) { // импорт архива importOK = ImportExport.ImportArchive(txtFileName.Text, Tables.TableInfoList, logFileName, out logCreated, out msg); } else { // импорт таблицы int minID = gbIDs.Enabled && chkStartID.Checked ? Convert.ToInt32(numStartID.Value) : 0; int maxID = gbIDs.Enabled && chkFinalID.Checked ? Convert.ToInt32(numFinalID.Value) : int.MaxValue; int newMinID = gbIDs.Enabled && chkNewStartID.Checked ? Convert.ToInt32(numNewStartID.Value) : 0; importOK = ImportExport.ImportTable(txtFileName.Text, tableInfo, minID, maxID, newMinID, logFileName, out logCreated, out msg); } // отображение сообщения о результате импорта if (importOK) { ScadaUtils.ShowInfo(msg); } else { AppUtils.ProcError(msg); } // отображение журанала в блокноте if (logCreated) { Process.Start(logFileName); } } }
private void btnExport_Click(object sender, EventArgs e) { // экспорт выбранной таблицы в формат DAT Tables.TableInfo tableInfo = cbTable.SelectedItem as Tables.TableInfo; if (tableInfo != null && AppData.Connected) { int minID = gbIDs.Enabled && chkStartID.Checked ? Convert.ToInt32(numStartID.Value) : 0; int maxID = gbIDs.Enabled && chkFinalID.Checked ? Convert.ToInt32(numFinalID.Value) : int.MaxValue; string msg; if (ImportExport.ExportTable(tableInfo, txtFileName.Text, minID, maxID, out msg)) { ScadaUiUtils.ShowInfo(msg); } else { AppUtils.ProcError(msg); } } }
private void btnExport_Click(object sender, EventArgs e) { // экспорт выбранной таблицы в формат DAT try { Tables.TableInfo tableInfo = cbTable.SelectedItem as Tables.TableInfo; if (tableInfo != null && AppData.Connected) { string fileName = txtFileName.Text.Trim(); string directory = fileName == "" ? "" : Path.GetDirectoryName(fileName); if (directory == "") { ScadaUtils.ShowError(AppPhrases.ExportDirUndefied); } else { if (Directory.Exists(directory)) { BaseAdapter adapter = new BaseAdapter(); DataTable table = tableInfo.GetTable(); adapter.FileName = fileName; adapter.Update(table); ScadaUtils.ShowInfo(AppPhrases.ExportCompleted); } else { ScadaUtils.ShowError(AppPhrases.ExportDirNotExists); } } } } catch (Exception ex) { AppUtils.ProcError(AppPhrases.ExportError + ":\r\n" + ex.Message); } }
/// <summary> /// Импортировать таблицу /// </summary> private static void ImportTable(DataTable srcTable, Tables.TableInfo destTableInfo, int shiftID, StreamWriter writer, out int updRowCnt, out int errRowCnt, out string msg) { // определение режима импорта: только добавление строк или добавление/обновление string idColName = destTableInfo.IDColName; bool tryToUpdate = idColName != "" && srcTable.Columns.Contains(idColName); // получение таблицы, в которую производится импорт DataTable destTable; if (tryToUpdate) { // заполение столбцов и данных таблицы destTable = destTableInfo.GetTable(); } else { // заполение столбцов таблицы destTable = new DataTable(destTableInfo.Name); Tables.FillTableSchema(destTable); } // вывод заголовка и стобцов в журнал импорта if (writer != null) { writer.WriteLine(); WriteTitle(writer, string.Format(AppPhrases.ImportTableTitle, destTableInfo.Name + " (" + destTableInfo.Header + ")")); writer.WriteLine(); WriteColumns(writer, srcTable, AppPhrases.SrcTableColumns); WriteColumns(writer, destTable, AppPhrases.DestTableColumns); } // заполнение таблицы в формате SDF foreach (DataRowView srcRowView in srcTable.DefaultView) { DataRow srcRow = srcRowView.Row; DataRow destRow = null; if (tryToUpdate) { int newID = (int)srcRow[idColName] + shiftID; int rowInd = destTable.DefaultView.Find(newID); // таблица отсортирована по ключу if (rowInd >= 0) { destRow = destTable.DefaultView[rowInd].Row; } } if (destRow == null) { destRow = destTable.NewRow(); destTable.Rows.Add(destRow); } foreach (DataColumn destColumn in destTable.Columns) { int ind = srcTable.Columns.IndexOf(destColumn.ColumnName); if (ind >= 0 && destColumn.DataType == srcTable.Columns[ind].DataType) { object val = srcRow[ind]; destRow[destColumn] = destColumn.ColumnName == idColName && shiftID > 0 ? (int)val /*ID*/ + shiftID : val; } } } // сохранение информации в базе конфигурации в формате SDF updRowCnt = 0; errRowCnt = 0; DataRow[] errRows = null; try { SqlCeDataAdapter sqlAdapter = destTable.ExtendedProperties["DataAdapter"] as SqlCeDataAdapter; updRowCnt = sqlAdapter.Update(destTable); } catch (Exception ex) { throw new Exception(AppPhrases.WriteDBError + ":\r\n" + ex.Message); } // обработка ошибок if (destTable.HasErrors) { errRows = destTable.GetErrors(); errRowCnt = errRows.Length; } msg = errRowCnt == 0 ? string.Format(AppPhrases.ImportTableCompleted, updRowCnt) : string.Format(AppPhrases.ImportTableCompletedWithErr, updRowCnt, errRowCnt); // вывод результата и ошибок в журнал импорта if (writer != null) { WriteTitle(writer, AppPhrases.ImportTableResult); writer.WriteLine(msg); if (errRowCnt > 0) { writer.WriteLine(); WriteTitle(writer, AppPhrases.ImportTableErrors); foreach (DataRow row in errRows) { if (idColName != "") { writer.Write(idColName + " = " + row[idColName] + " : "); } writer.WriteLine(row.RowError); } } } }
/// <summary> /// Импортировать таблицу базы конфигурации из файла формата DAT /// </summary> public static bool ImportTable(string srcFileName, Tables.TableInfo destTableInfo, int minID, int maxID, int newMinID, string logFileName, out bool logCreated, out string msg) { // проверка аргументов метода if (string.IsNullOrWhiteSpace(srcFileName)) { throw new ArgumentException(AppPhrases.ImportFileUndefied); } if (!File.Exists(srcFileName)) { throw new FileNotFoundException(AppPhrases.ImportFileNotExist); } if (destTableInfo == null) { throw new ArgumentNullException("destTableInfo"); } logCreated = false; StreamWriter writer = null; try { // создание журнала импорта и вывод параметров импорта if (!string.IsNullOrEmpty(logFileName)) { writer = new StreamWriter(logFileName, false, Encoding.UTF8); logCreated = true; WriteTitle(writer, DateTime.Now.ToString("G", Localization.Culture) + " " + AppPhrases.ImportTitle); writer.WriteLine(AppPhrases.ImportSource + srcFileName); } // загрузка импортируемой таблицы в формате DAT BaseAdapter baseAdapter = new BaseAdapter(); DataTable srcTable = new DataTable(); baseAdapter.FileName = srcFileName; try { baseAdapter.Fill(srcTable, true); } catch (Exception ex) { throw new Exception(AppPhrases.LoadTableError + ":\r\n" + ex.Message); } // ограничение диапазона идентификаторов string idColName = destTableInfo.IDColName; if ((0 < minID || maxID < int.MaxValue) && idColName != "") { srcTable.DefaultView.RowFilter = string.Format("{0} <= {2} and {2} <= {1}", minID, maxID, idColName); } int shiftID = newMinID > 0 ? newMinID - minID : 0; // импорт таблицы int updRowCnt; int errRowCnt; ImportTable(srcTable, destTableInfo, shiftID, writer, out updRowCnt, out errRowCnt, out msg); if (updRowCnt > 0) { msg += AppPhrases.RefreshRequired; } return(errRowCnt == 0); } catch (Exception ex) { msg = AppPhrases.ImportTableError + ":\r\n" + ex.Message; try { if (logCreated) { writer.WriteLine(msg); } } catch { } return(false); } finally { try { writer.Close(); } catch { } } }
private void btnImport_Click(object sender, EventArgs e) { // импорт выбранной таблицы из формата DAT StreamWriter writer = null; bool writeLog = chkImportLog.Checked; bool logCreated = false; string logFileName = AppData.ExeDir + "ScadaAdminImport.txt"; try { Tables.TableInfo tableInfo = cbTable.SelectedItem as Tables.TableInfo; if (tableInfo != null && AppData.Connected) { string fileName = txtFileName.Text.Trim(); if (writeLog) { writer = new StreamWriter(logFileName, false, Encoding.Default); logCreated = true; string title = DateTime.Now.ToString("G", Localization.Culture) + " " + AppPhrases.ImportTitle; writer.WriteLine(title); writer.WriteLine(new string('-', title.Length)); writer.WriteLine(AppPhrases.ImportTable + tableInfo.Name + " (" + tableInfo.Header + ")"); writer.WriteLine(AppPhrases.ImportFile + fileName); writer.WriteLine(); } // загрузка импортируемой таблицы BaseAdapter baseAdapter = new BaseAdapter(); DataTable srcTable = new DataTable(); baseAdapter.FileName = fileName; try { baseAdapter.Fill(srcTable, true); } catch (Exception ex) { throw new Exception(AppPhrases.LoadTableError + ":\r\n" + ex.Message); } if (writeLog) { writer.WriteLine(AppPhrases.SrcTableFields); writer.WriteLine(new string('-', AppPhrases.SrcTableFields.Length)); if (srcTable.Columns.Count > 0) { foreach (DataColumn column in srcTable.Columns) { writer.WriteLine(column.ColumnName + " (" + column.DataType + ")"); } } else { writer.WriteLine(AppPhrases.NoFields); } writer.WriteLine(); } // определение схемы таблицы БД DataTable destTable = new DataTable(tableInfo.Name); Tables.FillTableSchema(destTable); if (writeLog) { writer.WriteLine(AppPhrases.DestTableFields); writer.WriteLine(new string('-', AppPhrases.DestTableFields.Length)); if (destTable.Columns.Count > 0) { foreach (DataColumn column in destTable.Columns) { writer.WriteLine(column.ColumnName + " (" + column.DataType + ")"); } } else { writer.WriteLine(AppPhrases.NoFields); } writer.WriteLine(); } // установка контроля идентификаторов string firstColumnName = destTable.Columns.Count > 0 ? destTable.Columns[0].ColumnName : ""; bool firstColumnIsID = gbIDs.Enabled && (firstColumnName.EndsWith("ID") || firstColumnName.EndsWith("Num") || firstColumnName == "CnlStatus") && destTable.Columns[0].DataType == typeof(int); bool checkMinID = chkStartID.Checked && firstColumnIsID; bool checkMaxID = chkFinalID.Checked && firstColumnIsID; bool shiftID = chkNewStartID.Checked && firstColumnIsID; bool shiftDef = false; // смещение определено bool checkID = checkMaxID || checkMinID || shiftID; int minID = checkMinID ? Convert.ToInt32(numStartID.Value) : 0; int maxID = checkMaxID ? Convert.ToInt32(numFinalID.Value) : 0; int newStartID = shiftID ? Convert.ToInt32(numNewStartID.Value) : 0; int shift = 0; // заполнение таблицы БД foreach (DataRow row in srcTable.Rows) { DataRow newRow = destTable.NewRow(); bool rowIsOk = true; foreach (DataColumn column in destTable.Columns) { int ind = srcTable.Columns.IndexOf(column.ColumnName); if (ind >= 0 && column.DataType == srcTable.Columns[ind].DataType) { object val = row[ind]; if (ind == 0 && checkID && val != null && val != DBNull.Value) { // проверка идентификатора int id = (int)val; if (checkMinID && id < minID || checkMaxID && id > maxID) { rowIsOk = false; break; } if (shiftID && !shiftDef) { shift = newStartID - id; shiftDef = true; } newRow[column] = id + shift; } else { newRow[column] = val; } } } if (rowIsOk) { destTable.Rows.Add(newRow); } } // сохранение информации в БД int updRows = 0; int errRows = 0; DataRow[] rowsInError = null; try { SqlCeDataAdapter sqlAdapter = destTable.ExtendedProperties["DataAdapter"] as SqlCeDataAdapter; updRows = sqlAdapter.Update(destTable); } catch (Exception ex) { throw new Exception(AppPhrases.WriteDBError + ":\r\n" + ex.Message); } if (destTable.HasErrors) { rowsInError = destTable.GetErrors(); errRows = rowsInError.Length; } string msg; if (errRows == 0) { msg = string.Format(AppPhrases.ImportCompleted, updRows); ScadaUtils.ShowInfo(updRows > 0 ? msg + AppPhrases.RefreshRequired : msg); } else { msg = string.Format(AppPhrases.ImportCompletedWithErr, updRows, errRows); AppData.ErrLog.WriteAction(msg, Log.ActTypes.Error); ScadaUtils.ShowError(updRows > 0 ? msg + AppPhrases.RefreshRequired : msg); } if (writeLog) { writer.WriteLine(AppPhrases.ImportResult); writer.WriteLine(new string('-', AppPhrases.ImportResult.Length)); writer.WriteLine(msg); if (errRows > 0) { writer.WriteLine(); writer.WriteLine(AppPhrases.ImportErrors); writer.WriteLine(new string('-', AppPhrases.ImportErrors.Length)); foreach (DataRow row in rowsInError) { if (firstColumnIsID) { object objVal = row[0]; string strVal = objVal == null || objVal == DBNull.Value ? "NULL" : objVal.ToString(); writer.Write(firstColumnName + " = " + strVal + " : "); } writer.WriteLine(row.RowError); } } } } } catch (Exception ex) { string errMsg = AppPhrases.ImportError + ":\r\n" + ex.Message; try { if (writeLog) { writer.WriteLine(errMsg); } } catch { } AppUtils.ProcError(errMsg); } finally { try { writer.Close(); } catch { } } if (writeLog && logCreated) { Process.Start(logFileName); } }