private DataTable dataTable; // загруженная таблица /// <summary> /// Конструктор /// </summary> private FrmBaseTableView() { InitializeComponent(); errLog = null; baseAdapter = null; dataTable = null; }
private void btnOpen_Click(object sender, EventArgs e) { if (rbSrez.Checked) { dataTable = new DataTable("SrezTable"); SrezAdapter sa = new SrezAdapter(); sa.FileName = txtFileName.Text; sa.Fill(dataTable); } else if (rbEvent.Checked) { dataTable = new DataTable("EventTable"); EventAdapter ea = new EventAdapter(); ea.FileName = txtFileName.Text; ea.Fill(dataTable); } else // rbBase.Checked { dataTable = new DataTable("BaseTable"); BaseAdapter ba = new BaseAdapter(); ba.FileName = txtFileName.Text; ba.Fill(dataTable, true); } dataGridView.DataSource = dataTable; }
/// <summary> /// Загрузить таблицу базы конфигурации /// </summary> private static bool LoadDataTable(BaseAdapter baseAdapter, Log errLog, ref DataTable dataTable) { try { baseAdapter.Fill(dataTable, true); return true; } catch (Exception ex) { string errMsg = AppPhrases.IncorrectFilter + ":\r\n" + ex.Message; if (errLog != null) errLog.WriteAction(errMsg, Log.ActTypes.Exception); ScadaUtils.ShowError(errMsg); return false; } }
/// <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 { } } }
/// <summary> /// Отобразить форму просмотра таблицы базы конфигурации /// </summary> public static void Show(string directory, string tableName, Log errLog) { if (string.IsNullOrEmpty(directory)) throw new ArgumentException("directory"); if (string.IsNullOrEmpty(tableName)) throw new ArgumentException("tableName"); if (errLog == null) throw new ArgumentNullException("errLog"); // загрузка таблицы BaseAdapter baseAdapter = new BaseAdapter(); baseAdapter.Directory = directory; baseAdapter.TableName = tableName; DataTable dataTable = new DataTable(); // отображение формы if (LoadDataTable(baseAdapter, errLog, ref dataTable)) { FrmBaseTableView frmBaseTableView = new FrmBaseTableView(); frmBaseTableView.errLog = errLog; frmBaseTableView.baseAdapter = baseAdapter; frmBaseTableView.dataTable = dataTable; frmBaseTableView.ShowDialog(); } }
/// <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; } }
/// <summary> /// Считать пользователей из базы конфигурации /// </summary> private bool ReadUsers() { try { lock (users) { users.Clear(); DataTable tblUser = new DataTable(); BaseAdapter adapter = new BaseAdapter(); adapter.FileName = Settings.BaseDATDir + "user.dat"; adapter.Fill(tblUser, false); foreach (DataRow dataRow in tblUser.Rows) { User user = new User(); user.Name = (string)dataRow["Name"]; user.Password = (string)dataRow["Password"]; user.RoleID = (int)dataRow["RoleID"]; users[user.Name.Trim().ToLowerInvariant()] = user; } } AppLog.WriteAction(Localization.UseRussian ? "Пользователи считаны из базы конфигурации" : "Users are read from the configuration database", Log.ActTypes.Action); return true; } catch (Exception ex) { AppLog.WriteAction((Localization.UseRussian ? "Ошибка при считывании пользователей из базы конфигурации: " : "Error reading users from the configuration database: ") + ex.Message, Log.ActTypes.Exception); return false; } }
/// <summary> /// Загрузить данные базы конфигурации /// </summary> private void LoadBase() { try { tblInCnl.Clear(); tblCtrlCnl.Clear(); tblObj.Clear(); tblKP.Clear(); BaseAdapter adapter = new BaseAdapter(); adapter.Directory = baseDATDir; adapter.TableName = "incnl.dat"; adapter.Fill(tblInCnl, false); adapter.TableName = "ctrlcnl.dat"; adapter.Fill(tblCtrlCnl, false); adapter.TableName = "obj.dat"; adapter.Fill(tblObj, false); DataRow row = tblObj.NewRow(); row["ObjNum"] = 0; row["Name"] = AppPhrases.AllObjItem; tblObj.Rows.InsertAt(row, 0); adapter.TableName = "kp.dat"; adapter.Fill(tblKP, false); row = tblKP.NewRow(); row["KPNum"] = 0; row["Name"] = AppPhrases.AllKPItem; row["KPTypeID"] = 0; tblKP.Rows.InsertAt(row, 0); baseLoaded = true; } catch (Exception ex) { ScadaUtils.ShowError(AppPhrases.LoadBaseError + ":\n" + ex.Message); baseLoaded = false; } }
/// <summary> /// Считать формулы из базы конфигурации /// </summary> private bool ReadFormulas() { try { formulas.Clear(); DataTable tblFormula = new DataTable(); BaseAdapter adapter = new BaseAdapter(); adapter.FileName = Settings.BaseDATDir + "formula.dat"; adapter.Fill(tblFormula, false); foreach (DataRow dataRow in tblFormula.Rows) formulas.Add((string)dataRow["Source"]); AppLog.WriteAction(Localization.UseRussian ? "Формулы считаны из базы конфигурации" : "Formulas are read from the configuration database", Log.ActTypes.Action); return true; } catch (Exception ex) { AppLog.WriteAction((Localization.UseRussian ? "Ошибка при считывании формул из базы конфигурации: " : "Error reading formulas from the configuration database: ") + ex.Message, Log.ActTypes.Exception); return false; } }
/// <summary> /// Считать входные каналы из базы конфигурации /// </summary> private bool ReadInCnls() { try { lock (inCnls) { // очистка информации о каналах inCnls.Clear(); drCnls = new List<InCnl>(); drmCnls = new List<InCnl>(); drhCnls = new List<InCnl>(); drCnlNums = null; drmCnlNums = null; drhCnlNums = null; avgCnlInds = new List<int>(); // заполнение информации о каналах DataTable tblInCnl = new DataTable(); BaseAdapter adapter = new BaseAdapter(); adapter.FileName = Settings.BaseDATDir + "incnl.dat"; adapter.Fill(tblInCnl, false); foreach (DataRow dataRow in tblInCnl.Rows) { if ((bool)dataRow["Active"]) { // заполняются только свойства, используемые приложением InCnl inCnl = new InCnl(); inCnl.CnlNum = (int)dataRow["CnlNum"]; inCnl.CnlTypeID = (int)dataRow["CnlTypeID"]; inCnl.ObjNum = (int)dataRow["ObjNum"]; inCnl.KPNum = (int)dataRow["KPNum"]; inCnl.FormulaUsed = (bool)dataRow["FormulaUsed"]; inCnl.Formula = (string)dataRow["Formula"]; inCnl.Averaging = (bool)dataRow["Averaging"]; inCnl.ParamID = (int)dataRow["ParamID"]; inCnl.EvEnabled = (bool)dataRow["EvEnabled"]; inCnl.EvOnChange = (bool)dataRow["EvOnChange"]; inCnl.EvOnUndef = (bool)dataRow["EvOnUndef"]; inCnl.LimLowCrash = (double)dataRow["LimLowCrash"]; inCnl.LimLow = (double)dataRow["LimLow"]; inCnl.LimHigh = (double)dataRow["LimHigh"]; inCnl.LimHighCrash = (double)dataRow["LimHighCrash"]; int cnlTypeID = inCnl.CnlTypeID; if (BaseValues.CnlTypes.MinCnlTypeID <= cnlTypeID && cnlTypeID <= BaseValues.CnlTypes.MaxCnlTypeID) inCnls.Add(inCnl.CnlNum, inCnl); if (cnlTypeID == BaseValues.CnlTypes.TSDR || cnlTypeID == BaseValues.CnlTypes.TIDR || cnlTypeID == BaseValues.CnlTypes.SWCNT) drCnls.Add(inCnl); else if (cnlTypeID == BaseValues.CnlTypes.TSDRM || cnlTypeID == BaseValues.CnlTypes.TIDRM) drmCnls.Add(inCnl); else if (cnlTypeID == BaseValues.CnlTypes.TSDRH || cnlTypeID == BaseValues.CnlTypes.TIDRH) drhCnls.Add(inCnl); if (inCnl.Averaging && cnlTypeID == BaseValues.CnlTypes.TI) avgCnlInds.Add(inCnls.Count - 1); } } // заполнение номеров дорасчётных каналов int cnt = drCnls.Count; drCnlNums = new int[cnt]; for (int i = 0; i < cnt; i++) drCnlNums[i] = drCnls[i].CnlNum; cnt = drmCnls.Count; drmCnlNums = new int[cnt]; for (int i = 0; i < cnt; i++) drmCnlNums[i] = drmCnls[i].CnlNum; cnt = drhCnls.Count; drhCnlNums = new int[cnt]; for (int i = 0; i < cnt; i++) drhCnlNums[i] = drhCnls[i].CnlNum; // определение результата if (inCnls.Count > 0) { AppLog.WriteAction(string.Format(Localization.UseRussian ? "Входные каналы считаны из базы конфигурации. Количество активных каналов: {0}" : "Input channels are read from the configuration database. Active channel count: {0}", inCnls.Count), Log.ActTypes.Action); return true; } else { AppLog.WriteAction(Localization.UseRussian ? "В базе конфигурации отсутствуют активные входные каналы" : "No active input channels in the configuration database", Log.ActTypes.Error); return false; } } } catch (Exception ex) { AppLog.WriteAction((Localization.UseRussian ? "Ошибка при считывании входных каналов из базы конфигурации: " : "Error reading input channels from the configuration database: ") + ex.Message, Log.ActTypes.Exception); return false; } }
/// <summary> /// Импортировать архив базы конфигурации (патч) /// </summary> public static bool ImportArchive(string srcFileName, List<Tables.TableInfo> destTableInfoList, 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 (destTableInfoList == null) throw new ArgumentNullException("destTableInfoList"); 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); } using (ZipFile zipFile = ZipFile.Read(srcFileName)) { // получение словаря всех файлов архива с именами в нижнем регистре Dictionary<string, ZipEntry> zipEntries = new Dictionary<string, ZipEntry>(zipFile.Count); foreach (ZipEntry zipEntry in zipFile) zipEntries.Add(zipEntry.FileName.ToLowerInvariant(), zipEntry); // импорт таблиц из тех, которые содержатся в архиве int totalUpdRowCnt = 0; int totalErrRowCnt = 0; int updRowCnt; int errRowCnt; foreach (Tables.TableInfo destTableInfo in destTableInfoList) { if (zipEntries.ContainsKey(destTableInfo.FileName)) { using (MemoryStream zipStream = new MemoryStream()) { // распаковка архива в поток в памяти ZipEntry zipEntry = zipEntries[destTableInfo.FileName]; zipEntry.Extract(zipStream); // загрузка импортируемой таблицы в формате DAT из потока BaseAdapter baseAdapter = new BaseAdapter(); DataTable srcTable = new DataTable(); baseAdapter.Stream = zipStream; baseAdapter.Stream.Position = 0; try { baseAdapter.Fill(srcTable, true); } catch (Exception ex) { throw new Exception(AppPhrases.LoadTableError + ":\r\n" + ex.Message); } // импорт таблицы string s; ImportTable(srcTable, destTableInfo, 0, writer, out updRowCnt, out errRowCnt, out s); totalUpdRowCnt += updRowCnt; totalErrRowCnt += errRowCnt; } } } msg = totalErrRowCnt == 0 ? string.Format(AppPhrases.ImportCompleted, totalUpdRowCnt) : string.Format(AppPhrases.ImportCompletedWithErr, totalUpdRowCnt, totalErrRowCnt); // вывод результата в журнал импорта if (logCreated) { writer.WriteLine(); WriteTitle(writer, AppPhrases.ImportResult); writer.WriteLine(msg); } if (totalUpdRowCnt > 0) msg += AppPhrases.RefreshRequired; return totalErrRowCnt == 0; } } catch (Exception ex) { msg = AppPhrases.ImportArchiveError + ":\r\n" + ex.Message; try { if (logCreated) writer.WriteLine(msg); } catch { } return false; } finally { try { writer.Close(); } catch { } } }
/// <summary> /// Считать каналы управления из базы конфигурации /// </summary> private bool ReadCtrlCnls() { try { lock (ctrlCnls) { ctrlCnls.Clear(); DataTable tblCtrlCnl = new DataTable(); BaseAdapter adapter = new BaseAdapter(); adapter.FileName = Settings.BaseDATDir + "ctrlcnl.dat"; adapter.Fill(tblCtrlCnl, false); foreach (DataRow dataRow in tblCtrlCnl.Rows) { if ((bool)dataRow["Active"]) { // заполняются только свойства, используемые приложением CtrlCnl ctrlCnl = new CtrlCnl(); ctrlCnl.CtrlCnlNum = (int)dataRow["CtrlCnlNum"]; ctrlCnl.CmdTypeID = (int)dataRow["CmdTypeID"]; ctrlCnl.ObjNum = (int)dataRow["ObjNum"]; ctrlCnl.KPNum = (int)dataRow["KPNum"]; ctrlCnl.CmdNum = (int)dataRow["CmdNum"]; ctrlCnl.FormulaUsed = (bool)dataRow["FormulaUsed"]; ctrlCnl.Formula = (string)dataRow["Formula"]; ctrlCnl.EvEnabled = (bool)dataRow["EvEnabled"]; ctrlCnls.Add(ctrlCnl.CtrlCnlNum, ctrlCnl); } } } AppLog.WriteAction(Localization.UseRussian ? "Каналы управления считаны из базы конфигурации" : "Ouput channels are read from the configuration database", Log.ActTypes.Action); return true; } catch (Exception ex) { AppLog.WriteAction((Localization.UseRussian ? "Ошибка при считывании каналов управления из базы конфигурации: " : "Error reading ouput channels from the configuration database: ") + ex.Message, Log.ActTypes.Exception); return false; } }
/// <summary> /// Принять таблицу базы конфигурации от SCADA-Сервера /// </summary> public bool ReceiveBaseTable(string tableName, DataTable dataTable) { Monitor.Enter(tcpLock); bool result = false; errMsg = ""; try { try { if (RestoreConnection()) { using (MemoryStream memStream = new MemoryStream()) { if (ReceiveFile(Dirs.BaseDAT, tableName, memStream)) { BaseAdapter adapter = new BaseAdapter(); adapter.Stream = memStream; adapter.TableName = tableName; adapter.Fill(dataTable, false); result = true; } } } } finally { // очистка таблицы, если не удалось получить новые данные if (!result) dataTable.Rows.Clear(); } } catch (Exception ex) { errMsg = (Localization.UseRussian ? "Ошибка при приёме таблицы базы конфигурации от SCADA-Сервера: " : "Error receiving configuration database table from SCADA-Server: ") + ex.Message; WriteAction(errMsg, Log.ActTypes.Exception); } finally { Monitor.Exit(tcpLock); } return result; }
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); }
private void miDbPassToServer_Click(object sender, EventArgs e) { // перевод базы конфигурации в формат DAT try { if (AppData.Connected) { string baseDatDir = settings.AppSett.BaseDATDir; if (Directory.Exists(baseDatDir)) { // создание файла блокировки базы конфигурации string baseLockPath = baseDatDir + "baselock"; FileStream baseLockStream = new FileStream(baseLockPath, FileMode.Create, FileAccess.Write, FileShare.ReadWrite); baseLockStream.Close(); try { // сохранение таблиц базы конфигурации в формате DAT BaseAdapter adapter = new BaseAdapter(); foreach (Tables.TableInfo tableInfo in Tables.TablesInfo) { DataTable table = tableInfo.GetTable(); adapter.FileName = baseDatDir + tableInfo.FileName; adapter.Update(table); } } finally { // удаление файла блокировки базы конфигурации File.Delete(baseLockPath); } ScadaUtils.ShowInfo(AppPhrases.DbPassCompleted); } else { ScadaUtils.ShowError(CommonPhrases.BaseDATDirNotExists); } } } catch (Exception ex) { AppUtils.ProcError(AppPhrases.DbPassError + ":\r\n" + ex.Message); } }
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> /// Передать базу конфигурации серверу, т.е конвертировать из формата SDF в DAT /// </summary> public static bool PassBase(List<Tables.TableInfo> srcTableInfoList, string baseDATDir, out string msg) { try { // проверка аргументов метода if (srcTableInfoList == null) throw new ArgumentNullException("srcTableInfoList"); if (!Directory.Exists(baseDATDir)) throw new DirectoryNotFoundException(CommonPhrases.BaseDATDirNotExists); // создание файла блокировки базы конфигурации string baseLockPath = baseDATDir + "baselock"; FileStream baseLockStream = new FileStream(baseLockPath, FileMode.Create, FileAccess.Write, FileShare.ReadWrite); baseLockStream.Close(); try { // сохранение таблиц в формате DAT BaseAdapter adapter = new BaseAdapter(); foreach (Tables.TableInfo tableInfo in Tables.TableInfoList) { DataTable table = tableInfo.GetTable(); adapter.FileName = baseDATDir + tableInfo.FileName; adapter.Update(table); } } finally { // удаление файла блокировки базы конфигурации File.Delete(baseLockPath); } msg = AppPhrases.DbPassCompleted; return true; } catch (Exception ex) { msg = AppPhrases.DbPassError + ":\r\n" + ex.Message; return false; } }