Example #1
0
 private void cbTable_SelectedIndexChanged(object sender, EventArgs e)
 {
     // установка имени файла таблицы
     Tables.TableInfo tableInfo = cbTable.SelectedItem as Tables.TableInfo;
     if (tableInfo != null)
     {
         txtFileName.Text = DefaultDirectory + tableInfo.FileName;
     }
 }
Example #2
0
        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);
                    }
                }
            }
        }
Example #3
0
        /// <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);
            }
        }
Example #4
0
        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 != "";
            }
        }
Example #5
0
        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);
                }
            }
        }
Example #6
0
        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);
                }
            }
        }
Example #7
0
        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);
            }
        }
Example #8
0
        /// <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);
                    }
                }
            }
        }
Example #9
0
        /// <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 { }
            }
        }
Example #10
0
        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);
            }
        }