/// <summary>
        /// Получение таблицы с параметрами соединения источника данных дешифрованным паролем
        /// </summary>
        /// <param name="src">таблица - рез-т выполнения функции 'GetConnectionSettings'</param>
        /// <param name="row_src"></param>
        /// <param name="psw"></param>
        /// <param name="row_psw"></param>
        /// <returns></returns>
        private static DataTable GetConnectionSettings(ref DataTable src, int row_src, ref DataTable psw, int row_psw)
        {
            string errMsg, strPsw;

            errMsg = strPsw = string.Empty;

            if (psw.Rows.Count == 1)
            {
                //hash = psw.Rows[row_psw]["HASH"].ToString ().ToCharArray ();
                //len_hash = psw.Rows[row_psw]["HASH"].ToString().Length;

                strPsw = Crypt.Crypting().Decrypt(psw.Rows[row_psw]["HASH"].ToString(), Crypt.KEY);
            }
            else
            {
                ;
            }

            //Проверка с каким вариантом БД происходит работа
            if (src.Columns.IndexOf("PASSWORD") < 0)
            {
                src.Columns.Add("PASSWORD", typeof(string));
            }
            else
            {
                ;
            }

            if (row_src < src.Rows.Count)
            {
                src.Rows[row_src]["PASSWORD"] = strPsw;
            }
            else
            {
                ;
            }

            return(src);
        }
        /// <summary>
        /// Разбор зашифрованного файла с параметрами соединения
        /// </summary>
        /// <param name="connSetts">выходной список с объектами с параметрами соединения</param>
        /// <param name="msgErr">Текст сообщения при наличии ошибки</param>
        /// <returns>Признак выполнения: 0 - успех</returns>
        private int ParseSettingsFile(out List <ConnectionSettings> connSetts, out string msgErr)
        {
            connSetts = new List <ConnectionSettings> ();
            msgErr    = string.Empty;

            mayToProtected = true;

            char[] file  = new char[1024];
            int    count = -1;

            if (m_mode == MODE.FILE)
            {
                StreamReader sr = new StreamReader(m_arg);
                count = sr.ReadBlock(file, 0, 1024);
                sr.Close();
            }
            else
            {
                file  = m_arg.ToCharArray();
                count = file.Length;
            }

            StringBuilder sb = new StringBuilder(1024);
            int           i = 0, j = 0, k = 3,
                          countParts = 0;

            if (!(count > 0))
            {
                mayToProtected = false;
            }
            else
            {
                sb = Crypt.Crypting().Decrypt(file, count, out msgErr);
                if (msgErr.Length > 0)
                {
                    mayToProtected = false;
                }
                else
                {
                    ;
                }
            }

            if (mayToProtected == true)
            {
                int    pos1 = 0, pos2 = 0, port;
                bool   valid;
                string st = sb.ToString(), ignore;

                i = 0;

                pos1 = st.IndexOf('#', 0);
                if (pos1 > 0)
                {
                    countParts = System.Int32.Parse(st.Substring(0, pos1));
                    pos1++;

                    //foreach (ConnectionSettings cs in m_connectionSettings)
                    while (i < countParts)
                    {
                        connSetts.Add(new ConnectionSettings());
                        connSetts[connSetts.Count - 1].id = ConnectionSettings.UN_ENUMERABLE_ID - i;
                        //connSetts[connSetts.Count - 1].port = 1433;

                        pos2 = st.IndexOf(';', pos1);
                        if (pos2 < 0)
                        {
                            //MessageBox.Show(this, "Файл с насртойками имеет неправильный формат!\nОбратитесь к поставщику программы.", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
                            mayToProtected = false;
                            break;
                        }
                        else
                        {
                            ;
                        }

                        connSetts[i].server = st.Substring(pos1, pos2 - pos1);
                        pos1 = pos2 + 1;

                        pos2 = st.IndexOf(';', pos1);
                        if (pos2 < 0)
                        {
                            //MessageBox.Show(this, "Файл с насртойками имеет неправильный формат!\nОбратитесь к поставщику программы.", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
                            mayToProtected = false;
                            break;
                        }
                        else
                        {
                            ;
                        }
                        valid = int.TryParse(st.Substring(pos1, pos2 - pos1), out port);
                        if (!valid)
                        {
                            //MessageBox.Show(this, "В файле настроек неправильно задан порт!\nОбратитесь к поставщику программы.", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
                            mayToProtected = false;
                            break;
                        }
                        else
                        {
                            ;
                        }
                        connSetts[i].port = port;
                        pos1 = pos2 + 1;

                        pos2 = st.IndexOf(';', pos1);
                        if (pos2 < 0)
                        {
                            //MessageBox.Show(this, "Файл с насртойками имеет неправильный формат!\nОбратитесь к поставщику программы.", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
                            mayToProtected = false;
                            break;
                        }
                        else
                        {
                            ;
                        }
                        connSetts[i].dbName = st.Substring(pos1, pos2 - pos1);
                        pos1 = pos2 + 1;

                        pos2 = st.IndexOf(';', pos1);
                        if (pos2 < 0)
                        {
                            //MessageBox.Show(this, "Файл с насртойками имеет неправильный формат!\nОбратитесь к поставщику программы.", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
                            mayToProtected = false;
                            break;
                        }
                        else
                        {
                            ;
                        }
                        connSetts[i].userName = st.Substring(pos1, pos2 - pos1);
                        pos1 = pos2 + 1;

                        pos2 = st.IndexOf(';', pos1);
                        if (pos2 < 0)
                        {
                            msgErr         = "Файл с насртойками имеет неправильный формат!\nОбратитесь к поставщику программы.";
                            mayToProtected = false;
                            break;
                        }
                        else
                        {
                            ;
                        }
                        connSetts[i].password = st.Substring(pos1, pos2 - pos1);
                        pos1 = pos2 + 1;

                        pos2 = st.IndexOf(';', pos1);
                        if (pos2 < 0)
                        {
                            msgErr         = "Файл с насртойками имеет неправильный формат!\nОбратитесь к поставщику программы.";
                            mayToProtected = false;
                            break;
                        }
                        else
                        {
                            ;
                        }
                        ignore = st.Substring(pos1, pos2 - pos1);
                        if (ignore != "1" && ignore != "0")
                        {
                            msgErr         = "В файле настроек неправильно задано игнорирование!\nОбратитесь к поставщику программы.";
                            mayToProtected = false;
                            break;
                        }
                        else
                        {
                            ;
                        }
                        connSetts[i].ignore = (ignore == "1");

                        //m_connectionSettingsEdit[i].ignore = cs.ignore = (ignore == "0");

                        pos1 = pos2 + 1;

                        i++;
                    }

                    if (mayToProtected == false)
                    {
                        for (int c = 0; c < connSetts.Count; c++)
                        {
                            connSetts[c].SetDefault();
                        }
                    }
                    else
                    {
                        ;
                    }
                }
                else
                {
                    mayToProtected = false; //Не найдено количество блоков соединений
                }
            }
            else
            {
                mayToProtected = false;
            }

            if (mayToProtected == true)
            {
                return(0); //Успех
            }
            else
            {
                return(1); //Ошибка
            }
        }
        public void Save(int idListener, List <ConnectionSettings> listConnSett, out int err)
        {
            err = 1;
            int    i = -1, c = -1;
            string strQuery, psw
            , hash;

            //char []hash;
            //StringBuilder sb;

            strQuery = psw = string.Empty;

            DbConnection conn = DbSources.Sources().GetConnection(idListener, out err);

            //DbConnection conn = DbTSQLInterface.GetConnection (m_ConnectionSettings, out err);

            if (err == 0)
            {
                DataTable tableSource = null,
                          tablePsw    = null;

                if (err == 0)
                {
                    for (i = 0; i < listConnSett.Count; i++)
                    {
                        tableSource = DbTSQLInterface.Select(ref conn, ConnectionSettingsRequest(listConnSett[i].id), null, null, out err);
                        //TYPE_DATABASE_CFG.CFG_200 = ???
                        tablePsw = DbTSQLInterface.Select(ref conn, PasswordRequest(TYPE_DATABASE_CFG.CFG_200, listConnSett[i].id, 501), null, null, out err);

                        if (tableSource.Rows.Count == 0)
                        {//INSERT
                        }
                        else
                        if (tableSource.Rows.Count == 1)
                        {    //UPDATE
                            if ((listConnSett[i].server.Equals(tableSource.Rows [0]["IP"].ToString()) == false) ||
                                (listConnSett[i].dbName.Equals(tableSource.Rows[0]["DB_NAME"].ToString()) == false) ||
                                (listConnSett[i].userName.Equals(tableSource.Rows[0]["UID"].ToString()) == false))
                            {
                                strQuery += "UPDATE SOURCE SET ";

                                strQuery += "IP='" + listConnSett[i].server + "',";
                                strQuery += "DB_NAME='" + listConnSett[i].dbName + "',";
                                strQuery += "UID='" + listConnSett[i].userName + "'";

                                strQuery += " WHERE ID=" + listConnSett[i].id + ";";
                            }
                            else
                            {
                                ;     //Ничего не изменилось
                            }
                            if (listConnSett[i].password.Length > 0)
                            {
                                //sb = new StringBuilder(listConnSett[i].password);
                                //hash = Crypt.Crypting().to(sb, out err);
                                hash = Crypt.Crypting().Encrypt(listConnSett[i].password, Crypt.KEY);

                                //if (err > 0)
                                if (hash.Length > 0)
                                {
                                    if (tablePsw.Rows.Count == 0)
                                    {    //INSERT
                                        strQuery += "INSERT INTO passwords (ID_EXT, ID_ROLE, HASH) VALUES (";

                                        strQuery += listConnSett[i].id + ", ";
                                        strQuery += 501 + ", ";
                                        strQuery += "'" + hash + "'";

                                        strQuery += ");";
                                    }
                                    else
                                    if (tablePsw.Rows.Count == 1)
                                    {        //UPDATE
                                        strQuery += "UPDATE passwords SET ";

                                        strQuery += "HASH='" + hash + "'";

                                        strQuery += " WHERE ID_EXT=" + listConnSett[i].id;
                                        strQuery += " AND ";
                                        strQuery += "ID_ROLE=" + 501 + ";";
                                    }
                                    else
                                    {
                                        ;
                                    }
                                }
                                else
                                {
                                    ;     //Ошибка шифрования пароля ИЛИ нет пароля
                                }
                            }
                            else
                            {
                                ;     //Нет пароля
                            }
                        }
                        else
                        {
                            ;
                        }
                    }

                    DbTSQLInterface.ExecNonQuery(ref conn, strQuery, null, null, out err);
                }
                else
                {
                    ;
                }
            }
            else
            {
                ;
            }

            //DbTSQLInterface.CloseConnection (conn, out err);
        }