예제 #1
0
        /// <summary>
        /// Создать новый параметр, добавить его в список, создать в базе данных
        /// и сохранить значение данного параметра
        /// </summary>
        /// <param name="p_identifier">Идентификатор параметра</param>
        /// <param name="p_time">Время поступления значения параметра</param>
        /// <param name="p_value">Значение параметра</param>
        private static void create_and_save(Guid p_identifier, DateTime p_time, float p_value)
        {
            SqlConnection connection = null;

            try
            {
                parameters.Insert(new DataBaseParameter(p_identifier));

                DataBaseParameter parameter = parameters.GetParameter(p_identifier);
                if (parameter != null)
                {
                    int index = measuring.GetTimeIndex(p_time.Ticks);
                    if (index > -1)
                    {
                        connection = new SqlConnection(_provider.Adapter.ConnectionString);
                        connection.Open();

                        if (connection.State == ConnectionState.Open)
                        {
                            using (SqlCommand command = connection.CreateCommand())
                            {
                                if (_provider.Peek(p_identifier) == false)
                                {
                                    _provider.InsertParameterToDataBase(parameter);
                                }

                                command.Parameters.Add(new SqlParameter("id", index));
                                command.Parameters.Add(new SqlParameter("val", p_value));

                                command.CommandText = string.Format("Insert Into dbo.{0} (id, val_prm) Values (@id, @val)", parameter.tblValues);
                                if (command.ExecuteNonQuery() != 1)
                                {
                                    throw new Exception("Не удалось сохранить параметр в БД");
                                }
                            }
                        }
                        else
                        {
                            throw new Exception("Не удалось установить соединение с БД");
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                string mes = ex.Message;
            }
            finally
            {
                if (connection != null)
                {
                    if (connection.State == ConnectionState.Open)
                    {
                        connection.Close();
                    }

                    connection.Dispose();
                }
            }
        }
예제 #2
0
        /// <summary>
        /// Сохранить параметры в БД
        /// </summary>
        private void Flush()
        {
            try
            {
                if (in_out_mutex.WaitOne(100))
                {
                    output.AddRange(input);
                    input.Clear();

                    in_out_mutex.ReleaseMutex();
                }

                foreach (DataBaseParameterValue parameter in output)
                {
                    int index = measuring.GetTimeIndex(parameter.Time);
                    try
                    {
                        DataBaseParameter p = parameters.GetParameter(parameter.Identifier);
                        SaveParameter(p.tblValues, index, parameter.Value);
                    }
                    catch
                    {
                        // --- не удалось сохранить значение параметра ----
                    }
                }

                output.Clear();
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message, ex);
            }
        }
예제 #3
0
        /// <summary>
        /// Удалить параметр из списка
        /// </summary>
        /// <param name="parameter">Удаляемый параметр</param>
        public void Remove(DataBaseParameter parameter)
        {
            bool blocked = false;

            try
            {
                if (mutex.WaitOne(1000))
                {
                    blocked = true;
                    if (count > 0)
                    {
                        for (int index = 0; index < parameters.Length; index++)
                        {
                            if (parameters[index] == parameter)
                            {
                                count             = count - 1;
                                parameters[index] = null;

                                CorrectArray();
                                break;
                            }
                        }
                    }
                }
            }
            finally
            {
                if (blocked)
                {
                    mutex.ReleaseMutex();
                }
            }
        }
예제 #4
0
        // ---- расширяющие методы ----

        /// <summary>
        /// Добавить параметр в конец списка
        /// </summary>
        /// <param name="parameter">Добавляемый параметр</param>
        public void Insert(DataBaseParameter parameter)
        {
            if (slim.TryEnterWriteLock(500))
            {
                try
                {
                    if (count < parameters.Length)
                    {
                        for (int index = 0; index < parameters.Length; index++)
                        {
                            if (parameters[index] == null)
                            {
                                count++;
                                parameters[index] = parameter;

                                break;
                            }
                        }
                    }
                }
                finally
                {
                    slim.ExitWriteLock();
                }
            }
            else
            {
                throw new TimeoutException();
            }
        }
예제 #5
0
        /// <summary>
        /// Удалить параметр из списка
        /// </summary>
        /// <param name="parameter">Удаляемый параметр</param>
        public void Remove(DataBaseParameter parameter)
        {
            if (slim.TryEnterWriteLock(500))
            {
                try
                {
                    if (count > 0)
                    {
                        for (int index = 0; index < parameters.Length; index++)
                        {
                            if (parameters[index] == parameter)
                            {
                                count             = count - 1;
                                parameters[index] = null;

                                CorrectArray();
                                break;
                            }
                        }
                    }
                }
                finally
                {
                    slim.ExitWriteLock();
                }
            }
        }
예제 #6
0
        /// <summary>
        /// Добавить параметр в загруженную БД
        /// </summary>
        /// <param name="parameter">Параметр который сохранить</param>
        public void InsertParameter(DataBaseParameter parameter)
        {
            bool blocked = false;

            try
            {
                if (mutex.WaitOne(1000))
                {
                    blocked = true;
                    if (state == DataBaseState.Loaded || state == DataBaseState.Saving)
                    {
                        dataBase.Insert(parameter);
                    }
                    else
                    {
                        throw new InvalidOperationException("База данных не загружена.");
                    }
                }
                else
                {
                    throw new TimeoutException();
                }
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message, ex);
            }
            finally
            {
                if (blocked)
                {
                    mutex.ReleaseMutex();
                }
            }
        }
예제 #7
0
        /// <summary>
        /// Создать таблицу описания параметра
        /// </summary>
        /// <param name="connection">Соединение с которым работать</param>
        /// <param name="transaction">Транзакция через которую осуществлять запись в БД</param>
        /// <param name="db_parameter">Параметр, который добавить в БД</param>
        protected void CreateParameterHistoryTable(SqlConnection connection, SqlTransaction transaction,
                                                   DataBaseParameter db_parameter)
        {
            try
            {
                if (db_parameter.Descriptions.Count == 0)
                {
                    DataBaseDescription description = new DataBaseDescription();

                    description.dtCreate = db_parameter.Created;
                    description.ID       = 0;

                    description.MainKey       = db_parameter.ID;
                    description.NameParameter = string.Empty;

                    description.NumberParameter = db_parameter.Numbe_Prm;
                    description.TypeParameter   = string.Empty;

                    description.NameParameter = "Параметр " + db_parameter.ID.ToString();
                    db_parameter.Descriptions.Add(description);
                }
                else
                {
                    foreach (DataBaseDescription desc in db_parameter.Descriptions)
                    {
                        desc.NumberParameter = db_parameter.ID;
                        desc.MainKey         = db_parameter.ID;

                        desc.dtCreate = db_parameter.Created;
                    }
                }

                using (SqlCommand tblCommand = connection.CreateCommand())
                {
                    tblCommand.Transaction = transaction;
                    tblCommand.CommandText = string.Format(sql_query_create_history_table, db_parameter.tblHistory);

                    tblCommand.ExecuteNonQuery();
                }
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message, ex);
            }
        }
예제 #8
0
        /// <summary>
        /// Создать таблицу значений параметра
        /// </summary>
        /// <param name="connection">Соединение с которым работать</param>
        /// <param name="transaction">Транзакция через которую осуществлять запись в БД</param>
        /// <param name="db_parameter">Параметр, который добавить в БД</param>
        protected void CreateParameterValuesTable(SqlConnection connection, SqlTransaction transaction,
                                                  DataBaseParameter db_parameter)
        {
            try
            {
                using (SqlCommand command = connection.CreateCommand())
                {
                    command.Transaction = transaction;

                    command.CommandText = string.Format(sql_query_create_values_table, db_parameter.tblValues);
                    command.ExecuteNonQuery();
                }
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message, ex);
            }
        }
예제 #9
0
        /// <summary>
        /// Добавить параметр в загруженную БД
        /// </summary>
        /// <param name="Identifier">Идентификатор параметра</param>
        /// <param name="Name">Имя параметра</param>
        public void InsertParameter(Guid Identifier, String Name)
        {
            bool blocked = false;

            try
            {
                if (mutex.WaitOne(1000))
                {
                    blocked = true;
                    if (state == DataBaseState.Loaded || state == DataBaseState.Saving)
                    {
                        DataBaseParameter   parameter   = new DataBaseParameter();
                        DataBaseDescription description = new DataBaseDescription();

                        parameter.Identifier = Identifier;

                        description.NameParameter = Name;
                        parameter.Descriptions.Add(description);

                        dataBase.Insert(parameter);
                    }
                    else
                    {
                        throw new InvalidOperationException("База данных не загружена.");
                    }
                }
                else
                {
                    throw new TimeoutException();
                }
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message, ex);
            }
            finally
            {
                if (blocked)
                {
                    mutex.ReleaseMutex();
                }
            }
        }
예제 #10
0
        /// <summary>
        /// Создать запись о параметре в главной таблице БД
        /// </summary>
        /// <param name="connection">Соединение с которым работать</param>
        /// <param name="transaction">Транзакция через которую осуществлять запись в БД</param>
        /// <param name="db_parameter">Параметр, который добавить в БД</param>
        protected void CreateParameterInMainTable(SqlConnection connection, SqlTransaction transaction,
                                                  DataBaseParameter db_parameter)
        {
            try
            {
                db_parameter.ID        = GetNextId(t_main, "id");
                db_parameter.Numbe_Prm = db_parameter.ID;

                db_parameter.Created = DateTime.Now;

                db_parameter.tblHistory = string.Format("History_{0}", db_parameter.Numbe_Prm);
                db_parameter.tblValues  = string.Format("Values_{0}", db_parameter.Numbe_Prm);

                SqlCommand command = connection.CreateCommand();
                command.Transaction = transaction;

                command.Parameters.Add(new SqlParameter("id", db_parameter.ID));
                command.Parameters.Add(new SqlParameter("dtCreate", db_parameter.Created.ToOADate()));

                command.Parameters.Add(new SqlParameter("numbe_prm", db_parameter.Numbe_Prm));
                command.Parameters.Add(new SqlParameter("tab_hist", db_parameter.tblHistory));

                command.Parameters.Add(new SqlParameter("tab_val", db_parameter.tblValues));
                command.Parameters.Add(new SqlParameter("guid", db_parameter.Identifier.ToString()));

                command.CommandText = string.Format("Insert Into {0} Values (@id, @dtCreate, @numbe_prm, @tab_hist, @tab_val, @guid)", t_main);
                if (command.ExecuteNonQuery() != 1)
                {
                    throw new Exception("Не удалось создать запись параметра в главной таблице БД.");
                }
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message, ex);
            }
        }
예제 #11
0
        /// <summary>
        /// Добавить описание параметра
        /// </summary>
        /// <param name="connection">Соединение с которым работать</param>
        /// <param name="db_parameter">Параметр описание которого сохранять в базу данных</param>
        protected void InsertDescriptions(SqlConnection connection, DataBaseParameter db_parameter)
        {
            foreach (DataBaseDescription desc in db_parameter.Descriptions)
            {
                using (SqlCommand command = connection.CreateCommand())
                {
                    command.Parameters.Add(new SqlParameter("id", desc.ID));
                    command.Parameters.Add(new SqlParameter("dtCreate", desc.dtCreate.ToOADate()));

                    command.Parameters.Add(new SqlParameter("main_key", desc.MainKey));
                    command.Parameters.Add(new SqlParameter("numbe_prm", desc.NumberParameter));

                    command.Parameters.Add(new SqlParameter("name_prm", desc.NameParameter));
                    command.Parameters.Add(new SqlParameter("type_prm", desc.TypeParameter));

                    command.CommandText = string.Format("Insert Into dbo.{0} Values (@id, @dtCreate, @main_key, @numbe_prm, @name_prm, @type_prm, " +
                                                        "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,'','', 0,0,0,0,0, '', 0,0,0,0)", db_parameter.tblHistory);
                    if (command.ExecuteNonQuery() != 1)
                    {
                        throw new Exception("Не удалось добавить описание параметра в БД.");
                    }
                }
            }
        }
예제 #12
0
        // ---- расширяющие методы ----

        /// <summary>
        /// Добавить параметр в конец списка
        /// </summary>
        /// <param name="parameter">Добавляемый параметр</param>
        public void Insert(DataBaseParameter parameter)
        {
            bool blocked = false;

            try
            {
                if (mutex.WaitOne(1000))
                {
                    blocked = true;
                    if (count < parameters.Length)
                    {
                        for (int index = 0; index < parameters.Length; index++)
                        {
                            if (parameters[index] == null)
                            {
                                count++;
                                parameters[index] = parameter;

                                break;
                            }
                        }
                    }
                }
                else
                {
                    throw new TimeoutException();
                }
            }
            finally
            {
                if (blocked)
                {
                    mutex.ReleaseMutex();
                }
            }
        }
예제 #13
0
        // ---- расширяющие методы ----
        /// <summary>
        /// Добавить параметр в конец списка
        /// </summary>
        /// <param name="parameter">Добавляемый параметр</param>
        public void Insert(DataBaseParameter parameter)
        {
            if (slim.TryEnterWriteLock(500))
            {
                try
                {
                    if (count < parameters.Length)
                    {
                        for (int index = 0; index < parameters.Length; index++)
                        {
                            if (parameters[index] == null)
                            {
                                count++;
                                parameters[index] = parameter;

                                break;
                            }
                        }
                    }
                }
                finally
                {
                    slim.ExitWriteLock();
                }
            }
            else
                throw new TimeoutException();
        }
예제 #14
0
        /// <summary>
        /// Создать запись о параметре в главной таблице БД
        /// </summary>
        /// <param name="connection">Соединение с которым работать</param>
        /// <param name="transaction">Транзакция через которую осуществлять запись в БД</param>
        /// <param name="db_parameter">Параметр, который добавить в БД</param>
        protected void CreateParameterInMainTable(SqlConnection connection, SqlTransaction transaction,
            DataBaseParameter db_parameter)
        {
            try
            {
                db_parameter.ID = GetNextId(t_main, "id");
                db_parameter.Numbe_Prm = db_parameter.ID;

                db_parameter.Created = DateTime.Now;

                db_parameter.tblHistory = string.Format("History_{0}", db_parameter.Numbe_Prm);
                db_parameter.tblValues = string.Format("Values_{0}", db_parameter.Numbe_Prm);

                SqlCommand command = connection.CreateCommand();
                command.Transaction = transaction;

                command.Parameters.Add(new SqlParameter("id", db_parameter.ID));
                command.Parameters.Add(new SqlParameter("dtCreate", db_parameter.Created.ToOADate()));

                command.Parameters.Add(new SqlParameter("numbe_prm", db_parameter.Numbe_Prm));
                command.Parameters.Add(new SqlParameter("tab_hist", db_parameter.tblHistory));

                command.Parameters.Add(new SqlParameter("tab_val", db_parameter.tblValues));
                command.Parameters.Add(new SqlParameter("guid", db_parameter.Identifier.ToString()));

                command.CommandText = string.Format("Insert Into {0} Values (@id, @dtCreate, @numbe_prm, @tab_hist, @tab_val, @guid)", t_main);
                if (command.ExecuteNonQuery() != 1)
                {
                    throw new Exception("Не удалось создать запись параметра в главной таблице БД.");
                }
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message, ex);
            }
        }
예제 #15
0
        /// <summary>
        /// Создать таблицу значений параметра
        /// </summary>
        /// <param name="connection">Соединение с которым работать</param>
        /// <param name="transaction">Транзакция через которую осуществлять запись в БД</param>
        /// <param name="db_parameter">Параметр, который добавить в БД</param>
        protected void CreateParameterValuesTable(SqlConnection connection, SqlTransaction transaction,
            DataBaseParameter db_parameter)
        {
            try
            {
                using (SqlCommand command = connection.CreateCommand())
                {
                    command.Transaction = transaction;

                    command.CommandText = string.Format(sql_query_create_values_table, db_parameter.tblValues);
                    command.ExecuteNonQuery();
                }
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message, ex);
            }
        }
예제 #16
0
        /// <summary>
        /// Добавить параметр в базу данных.
        /// База данных должна быть загруженна.
        /// </summary>
        /// <param name="parameter">Добавляемый параметр</param>
        public void InsertParameterToDataBase(DataBaseParameter parameter)
        {
            SqlConnection connection = null;
            SqlTransaction transaction = null;

            try
            {
                connection = new SqlConnection(adapter.ConnectionString);
                connection.Open();

                if (connection.State == ConnectionState.Open)
                {
                    if (Peek(parameter.Identifier) == false)
                    {
                        if (Peek(parameter.ID) == false)
                        {
                            transaction = connection.BeginTransaction();

                            CreateParameterInMainTable(connection, transaction, parameter);

                            CreateParameterValuesTable(connection, transaction, parameter);
                            CreateParameterHistoryTable(connection, transaction, parameter);

                            transaction.Commit();
                            InsertDescriptions(connection, parameter);
                        }
                        else
                            throw new Exception("Параметр с указанным номером существует в БД.");
                    }
                    else
                        throw new Exception("Параметр с указанным Guid существует в БД");
                }
                else
                    throw new Exception("Не удалось подключиться к БД.");
            }
            catch (Exception ex)
            {
                try
                {
                    transaction.Rollback();
                }
                catch (Exception ex1)
                {
                    throw new Exception(ex1.Message, ex1);
                }

                throw new Exception(ex.Message, ex);
            }
            finally
            {
                if (connection != null)
                {
                    if (connection.State == ConnectionState.Open)
                    {
                        connection.Close();
                    }

                    connection.Dispose();
                }

                if (transaction != null)
                    transaction.Dispose();
            }
        }
예제 #17
0
        /// <summary>
        /// Создать таблицу описания параметра
        /// </summary>
        /// <param name="connection">Соединение с которым работать</param>
        /// <param name="transaction">Транзакция через которую осуществлять запись в БД</param>
        /// <param name="db_parameter">Параметр, который добавить в БД</param>
        protected void CreateParameterHistoryTable(SqlConnection connection, SqlTransaction transaction,
            DataBaseParameter db_parameter)
        {
            try
            {
                if (db_parameter.Descriptions.Count == 0)
                {
                    DataBaseDescription description = new DataBaseDescription();

                    description.dtCreate = db_parameter.Created;
                    description.ID = 0;

                    description.MainKey = db_parameter.ID;
                    description.NameParameter = string.Empty;

                    description.NumberParameter = db_parameter.Numbe_Prm;
                    description.TypeParameter = string.Empty;

                    description.NameParameter = "Параметр " + db_parameter.ID.ToString();
                    db_parameter.Descriptions.Add(description);
                }
                else
                    foreach (DataBaseDescription desc in db_parameter.Descriptions)
                    {
                        desc.NumberParameter = db_parameter.ID;
                        desc.MainKey = db_parameter.ID;

                        desc.dtCreate = db_parameter.Created;
                    }

                using (SqlCommand tblCommand = connection.CreateCommand())
                {
                    tblCommand.Transaction = transaction;
                    tblCommand.CommandText = string.Format(sql_query_create_history_table, db_parameter.tblHistory);

                    tblCommand.ExecuteNonQuery();
                }
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message, ex);
            }
        }
예제 #18
0
        /// <summary>
        /// Сохранить значение параметра в БД
        /// </summary>
        /// <param name="p_identifier">Идентификатор параметра</param>
        /// <param name="p_time">Время поступления значения параметра</param>
        /// <param name="p_value">Значение параметра</param>
        public static void SaveParameter(Guid p_identifier, DateTime p_time, float p_value)
        {
            SqlConnection connection = null;

            try
            {
                if (!float.IsNaN(p_value) && !float.IsInfinity(p_value) &&
                    !float.IsNegativeInfinity(p_value) && !float.IsPositiveInfinity(p_value))
                {
                    DataBaseParameter parameter = parameters.GetParameter(p_identifier);
                    if (parameter != null)
                    {
                        int index = measuring.GetTimeIndex(p_time.Ticks);
                        if (index > -1)
                        {
                            connection = new SqlConnection(_provider.Adapter.ConnectionString);
                            connection.Open();

                            if (connection.State == ConnectionState.Open)
                            {
                                using (SqlCommand command = connection.CreateCommand())
                                {
                                    if (_provider.Peek(p_identifier) == false)
                                    {
                                        _provider.InsertParameterToDataBase(parameter);
                                    }

                                    command.Parameters.Add(new SqlParameter("id", index));
                                    command.Parameters.Add(new SqlParameter("val", p_value));

                                    command.CommandText = string.Format("Insert Into dbo.{0} (id, val_prm) Values (@id, @val)", parameter.tblValues);
                                    //command.ExecuteNonQuery();

                                    try
                                    {
                                        if (command.ExecuteNonQuery() != 1)
                                        {
                                            if (_provider.Peek(p_identifier) == false)
                                            {
                                                //create_and_save_1(p_identifier, p_time, p_value);// _provider.InsertParameterToDataBase(parameter);
                                            }
                                            //throw new Exception("Не удалось сохранить параметр в БД");
                                        }
                                    }
                                    catch
                                    {
                                        if (_provider.Peek(p_identifier) == false)
                                        {
                                            _provider.InsertParameterToDataBase(parameter);
                                        }
                                    }
                                }
                            }
                            else
                            {
                                throw new Exception("Не удалось установить соединение с БД");
                            }
                        }
                    }
                    else
                    {
                        // ----- не нашли параметр в списке ----

                        create_and_save(p_identifier, p_time, p_value);
                    }
                }
                else
                {
                    DataBaseParameter parameter = parameters.GetParameter(p_identifier);
                    if (parameter == null)
                    {
                        create_and_save(p_identifier, p_time, p_value);
                    }
                }
            }
            catch { }
            finally
            {
                if (connection != null)
                {
                    if (connection.State == ConnectionState.Open)
                    {
                        connection.Close();
                    }

                    connection.Dispose();
                }
            }
        }
예제 #19
0
        // ---- расширяющие методы ----
        /// <summary>
        /// Добавить параметр в конец списка
        /// </summary>
        /// <param name="parameter">Добавляемый параметр</param>
        public void Insert(DataBaseParameter parameter)
        {
            bool blocked = false;
            try
            {
                if (mutex.WaitOne(1000))
                {
                    blocked = true;
                    if (count < parameters.Length)
                    {
                        for (int index = 0; index < parameters.Length; index++)
                        {
                            if (parameters[index] == null)
                            {
                                count++;
                                parameters[index] = parameter;

                                break;
                            }
                        }
                    }
                }
                else
                    throw new TimeoutException();
            }
            finally
            {
                if (blocked) mutex.ReleaseMutex();
            }
        }
예제 #20
0
        /// <summary>
        /// Добавить параметр в базу данных.
        /// База данных должна быть загруженна.
        /// </summary>
        /// <param name="parameter">Добавляемый параметр</param>
        public void InsertParameterToDataBase(DataBaseParameter parameter)
        {
            SqlConnection  connection  = null;
            SqlTransaction transaction = null;

            try
            {
                connection = new SqlConnection(adapter.ConnectionString);
                connection.Open();

                if (connection.State == ConnectionState.Open)
                {
                    if (Peek(parameter.Identifier) == false)
                    {
                        if (Peek(parameter.ID) == false)
                        {
                            transaction = connection.BeginTransaction();

                            CreateParameterInMainTable(connection, transaction, parameter);

                            CreateParameterValuesTable(connection, transaction, parameter);
                            CreateParameterHistoryTable(connection, transaction, parameter);

                            transaction.Commit();
                            InsertDescriptions(connection, parameter);
                        }
                        else
                        {
                            throw new Exception("Параметр с указанным номером существует в БД.");
                        }
                    }
                    else
                    {
                        throw new Exception("Параметр с указанным Guid существует в БД");
                    }
                }
                else
                {
                    throw new Exception("Не удалось подключиться к БД.");
                }
            }
            catch (Exception ex)
            {
                try
                {
                    transaction.Rollback();
                }
                catch (Exception ex1)
                {
                    throw new Exception(ex1.Message, ex1);
                }

                throw new Exception(ex.Message, ex);
            }
            finally
            {
                if (connection != null)
                {
                    if (connection.State == ConnectionState.Open)
                    {
                        connection.Close();
                    }

                    connection.Dispose();
                }

                if (transaction != null)
                {
                    transaction.Dispose();
                }
            }
        }
예제 #21
0
        /// <summary>
        /// Загрузить описание параметра из БД
        /// </summary>
        /// <param name="db_parameter">Параметр для которого загрузить описание</param>
        private void LoadParameterDescription(DataBaseParameter db_parameter)
        {
            SqlConnection connection = null;

            try
            {
                string sql_query = string.Format("SELECT * FROM {0}", db_parameter.tblHistory);

                connection = new SqlConnection(adapter.ConnectionString);
                connection.Open();

                if (connection.State == ConnectionState.Open)
                {
                    using (SqlCommand command = new SqlCommand(sql_query, connection))
                    {
                        using (SqlDataReader result = command.ExecuteReader())
                        {
                            if (result != null)
                            {
                                if (result.IsClosed == false)
                                {
                                    while (result.Read())
                                    {
                                        DataBaseDescription db_description = new DataBaseDescription();

                                        db_description.ID       = result.GetInt32(0);
                                        db_description.dtCreate = DateTime.FromOADate(result.GetDouble(1));

                                        db_description.MainKey         = result.GetInt32(2);
                                        db_description.NumberParameter = result.GetInt32(3);

                                        db_description.NameParameter = result.GetString(4);
                                        db_description.TypeParameter = result.GetString(5);

                                        db_parameter.Descriptions.Add(db_description);
                                    }
                                }
                            }
                            else
                            {
                                throw new Exception("Не удалось считать данные описания параметра");
                            }
                        }
                    }
                }
                else
                {
                    throw new Exception("Не удалось подключиться к серверу БД.");
                }
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message, ex);
            }
            finally
            {
                if (connection != null)
                {
                    if (connection.State == ConnectionState.Open)
                    {
                        connection.Close();
                    }

                    connection.Dispose();
                }
            }
        }
예제 #22
0
파일: DataBase.cs 프로젝트: slawer/skc
        /// <summary>
        /// Загружает БД
        /// </summary>
        public void LoadDB()
        {
            SqlConnection connection = null;
            try
            {
                connection = new SqlConnection(adapter.ConnectionString);
                connection.Open();

                if (connection.State == ConnectionState.Open)
                {
                    SqlCommand command = new SqlCommand(structure.MainTable.SqlQueryForSelectAll, connection);

                    SqlDataReader result = command.ExecuteReader();
                    if (result != null)
                    {
                        if (result.IsClosed == false)
                        {
                            //parameters = new DataBaseParameters(1024);
                            while (result.Read())
                            {
                                DataBaseParameter db_parameter = new DataBaseParameter();

                                db_parameter.ID = result.GetInt32(structure.MainTable[0].IndexInTable);
                                db_parameter.Created = DateTime.FromOADate(result.GetDouble(structure.MainTable[1].IndexInTable));

                                db_parameter.Numbe_Prm = result.GetInt32(structure.MainTable[2].IndexInTable);
                                db_parameter.tblHistory = result.GetString(structure.MainTable[3].IndexInTable);

                                db_parameter.tblValues = result.GetString(structure.MainTable[4].IndexInTable);

                                try
                                {
                                    db_parameter.Identifier = new Guid(result.GetString(structure.MainTable[5].IndexInTable));
                                }
                                catch
                                {
                                }

                                ParameterDescriptionLoad(db_parameter);

                                if (parameters == null)
                                {
                                    parameters = new DataBaseParameters(1024);
                                }
                                parameters.Insert(db_parameter);

                                //saver.Inialize(adapter, parameters);
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                //ErrorHandler.WriteToLog(this, new ErrorArgs(ex.Message, ErrorType.NotFatal));
                throw new Exception(ex.Message, ex);
            }
            finally
            {
                if (connection != null)
                {
                    if (connection.State == ConnectionState.Open)
                    {
                        connection.Close();
                    }

                    connection.Dispose();
                }
            }
        }
예제 #23
0
파일: DataBase.cs 프로젝트: slawer/skc
        /// <summary>
        /// Загрузить описание параметра из БД
        /// </summary>
        /// <param name="db_parameter">Параметр для которого загрузить описание</param>
        private void ParameterDescriptionLoad(DataBaseParameter db_parameter)
        {
            SqlConnection connection = null;
            try
            {
                string sql_query = string.Format("SELECT * FROM {0}", db_parameter.tblHistory);

                connection = new SqlConnection(adapter.ConnectionString);
                connection.Open();

                if (connection.State == ConnectionState.Open)
                {
                    SqlCommand command = new SqlCommand(sql_query, connection);
                    SqlDataReader result = command.ExecuteReader();

                    if (result != null)
                    {
                        if (result.IsClosed == false)
                        {
                            while (result.Read())
                            {
                                DataBaseDescription db_description = new DataBaseDescription();

                                db_description.ID = result.GetInt32(structure.HistoryTable["id"].IndexInTable);
                                db_description.dtCreate = DateTime.FromOADate(result.GetDouble(structure.HistoryTable["dtCreate"].IndexInTable));

                                db_description.MainKey = result.GetInt32(structure.HistoryTable["main_key"].IndexInTable);
                                db_description.NumberParameter = result.GetInt32(structure.HistoryTable["numbe_prm"].IndexInTable);

                                db_description.NameParameter = result.GetString(structure.HistoryTable["name_prm"].IndexInTable);
                                db_description.TypeParameter = result.GetString(structure.HistoryTable["type_prm"].IndexInTable);

                                db_description.Val_block_up = result.GetFloat(structure.HistoryTable["val_block_up"].IndexInTable);
                                db_description.Val_block_down = result.GetFloat(structure.HistoryTable["val_block_down"].IndexInTable);

                                db_description.Val_avar = result.GetFloat(structure.HistoryTable["val_avar"].IndexInTable);
                                db_description.Val_max = result.GetFloat(structure.HistoryTable["val_max"].IndexInTable);

                                db_description.Val_min = result.GetFloat(structure.HistoryTable["val_min"].IndexInTable);

                                db_description.Calibr_1 = result.GetFloat(structure.HistoryTable["calibr_1"].IndexInTable);
                                db_description.Calibr_2 = result.GetFloat(structure.HistoryTable["calibr_2"].IndexInTable);

                                db_description.Calibr_3 = result.GetFloat(structure.HistoryTable["calibr_3"].IndexInTable);
                                db_description.Calibr_4 = result.GetFloat(structure.HistoryTable["calibr_4"].IndexInTable);

                                db_description.Calibr_5 = result.GetFloat(structure.HistoryTable["calibr_5"].IndexInTable);
                                db_description.Calibr_6 = result.GetFloat(structure.HistoryTable["calibr_6"].IndexInTable);

                                db_description.Calibr_7 = result.GetFloat(structure.HistoryTable["calibr_7"].IndexInTable);
                                db_description.Calibr_8 = result.GetFloat(structure.HistoryTable["calibr_8"].IndexInTable);

                                db_description.Calibr_9 = result.GetFloat(structure.HistoryTable["calibr_9"].IndexInTable);
                                db_description.Calibr_10 = result.GetFloat(structure.HistoryTable["calibr_10"].IndexInTable);

                                db_description.Snd_avar = result.GetString(structure.HistoryTable["snd_avar"].IndexInTable);
                                db_description.Snd_max = result.GetString(structure.HistoryTable["snd_max"].IndexInTable);

                                db_description.Graf_switch = result.GetInt32(structure.HistoryTable["graf_switch"].IndexInTable);
                                db_description.Graf_diapz = result.GetFloat(structure.HistoryTable["graf_diapz"].IndexInTable);

                                db_description.Graf_min = result.GetFloat(structure.HistoryTable["graf_min"].IndexInTable);
                                db_description.Graf_max = result.GetFloat(structure.HistoryTable["graf_max"].IndexInTable);

                                db_description.Contr_par = result.GetInt32(structure.HistoryTable["contr_par"].IndexInTable);
                                db_description.Res_str = result.GetString(structure.HistoryTable["res_str"].IndexInTable);

                                db_description.Res_float1 = result.GetFloat(structure.HistoryTable["res_float1"].IndexInTable);
                                db_description.Res_float2 = result.GetFloat(structure.HistoryTable["res_float2"].IndexInTable);

                                db_description.Res_int1 = result.GetInt32(structure.HistoryTable["res_int1"].IndexInTable);
                                db_description.Res_int2 = result.GetInt32(structure.HistoryTable["res_int2"].IndexInTable);

                                db_parameter.Descriptions.Add(db_description);
                            }
                        }
                    }
                    else
                        throw new Exception("Не удалось считать данные описания параметра");
                }
                else
                    throw new Exception("Не удалось подключиться к серверу БД.");
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message, ex);
            }
            finally
            {
                if (connection != null)
                {
                    if (connection.State == ConnectionState.Open)
                    {
                        connection.Close();
                    }

                    connection.Dispose();
                }
            }
        }
예제 #24
0
 /// <summary>
 /// Добавить параметр в загруженную БД
 /// </summary>
 /// <param name="parameter">Параметр который сохранить</param>
 public void InsertParameter(DataBaseParameter parameter)
 {
     bool blocked = false;
     try
     {
         if (mutex.WaitOne(1000))
         {
             blocked = true;
             if (state == DataBaseState.Loaded || state == DataBaseState.Saving)
             {
                 dataBase.Insert(parameter);
             }
             else
                 throw new InvalidOperationException("База данных не загружена.");
         }
         else
             throw new TimeoutException();
     }
     catch (Exception ex)
     {
         throw new Exception(ex.Message, ex);
     }
     finally
     {
         if (blocked) mutex.ReleaseMutex();
     }
 }
예제 #25
0
파일: DataBase.cs 프로젝트: slawer/skc
        /// <summary>
        /// Создать таблицу описания параметра
        /// </summary>
        /// <param name="connection">Соединение с которым работать</param>
        /// <param name="transaction">Транзакция через которую осуществлять запись в БД</param>
        /// <param name="db_parameter">Параметр, который добавить в БД</param>
        protected void CreateParameterHistoryTable(SqlConnection connection, SqlTransaction transaction,
            DataBaseParameter db_parameter)
        {
            try
            {
                if (db_parameter.Descriptions.Count == 0)
                {
                    DataBaseDescription description = new DataBaseDescription();

                    description.dtCreate = db_parameter.Created;
                    description.ID = 0;

                    description.MainKey = db_parameter.ID;
                    description.NameParameter = string.Empty;

                    description.NumberParameter = db_parameter.Numbe_Prm;
                    description.TypeParameter = string.Empty;

                    description.NameParameter = "Параметр " + db_parameter.ID.ToString();
                    db_parameter.Descriptions.Add(description);
                }
                else
                    foreach (DataBaseDescription desc in db_parameter.Descriptions)
                    {
                        desc.NumberParameter = db_parameter.ID;
                        desc.MainKey = db_parameter.ID;

                        desc.dtCreate = db_parameter.Created;
                    }

                SqlCommand tblCommand = connection.CreateCommand();
                tblCommand.Transaction = transaction;

                tblCommand.CommandText = string.Format(structure.HistoryTable.SqlQueryForCreateTable, db_parameter.tblHistory);

                tblCommand.ExecuteNonQuery();
                foreach (DataBaseDescription desc in db_parameter.Descriptions)
                {
                    SqlCommand command = connection.CreateCommand();
                    command.Transaction = transaction;

                    command.Parameters.Add(structure.HistoryTable["id"].Parameter);
                    command.Parameters[0].Value = desc.ID;

                    command.Parameters.Add(structure.HistoryTable["dtCreate"].Parameter);
                    command.Parameters[1].Value = desc.dtCreate.ToOADate();

                    command.Parameters.Add(structure.HistoryTable["main_key"].Parameter);
                    command.Parameters[2].Value = desc.MainKey;

                    command.Parameters.Add(new SqlParameter("numbe_prm", desc.NumberParameter));
                    command.Parameters[3].SqlDbType = SqlDbType.Int;

                    command.Parameters.Add(structure.HistoryTable["name_prm"].Parameter);
                    command.Parameters[4].Value = desc.NameParameter;

                    command.Parameters.Add(structure.HistoryTable["type_prm"].Parameter);
                    command.Parameters[5].Value = desc.TypeParameter;

                    command.Parameters.Add(structure.HistoryTable["val_block_up"].Parameter);
                    command.Parameters[6].Value = desc.Val_block_up;

                    command.Parameters.Add(structure.HistoryTable["val_block_down"].Parameter);
                    command.Parameters[7].Value = desc.Val_block_down;

                    command.Parameters.Add(structure.HistoryTable["val_avar"].Parameter);
                    command.Parameters[8].Value = desc.Val_avar;

                    command.Parameters.Add(structure.HistoryTable["val_max"].Parameter);
                    command.Parameters[9].Value = desc.Val_max;

                    command.Parameters.Add(structure.HistoryTable["val_min"].Parameter);
                    command.Parameters[10].Value = desc.Val_min;

                    command.Parameters.Add(structure.HistoryTable["calibr_1"].Parameter);
                    command.Parameters[11].Value = desc.Calibr_1;

                    command.Parameters.Add(structure.HistoryTable["calibr_2"].Parameter);
                    command.Parameters[12].Value = desc.Calibr_2;

                    command.Parameters.Add(structure.HistoryTable["calibr_3"].Parameter);
                    command.Parameters[13].Value = desc.Calibr_3;

                    command.Parameters.Add(structure.HistoryTable["calibr_4"].Parameter);
                    command.Parameters[14].Value = desc.Calibr_4;

                    command.Parameters.Add(structure.HistoryTable["calibr_5"].Parameter);
                    command.Parameters[15].Value = desc.Calibr_5;

                    command.Parameters.Add(structure.HistoryTable["calibr_6"].Parameter);
                    command.Parameters[16].Value = desc.Calibr_6;

                    command.Parameters.Add(structure.HistoryTable["calibr_7"].Parameter);
                    command.Parameters[17].Value = desc.Calibr_7;

                    command.Parameters.Add(structure.HistoryTable["calibr_8"].Parameter);
                    command.Parameters[18].Value = desc.Calibr_8;

                    command.Parameters.Add(structure.HistoryTable["calibr_9"].Parameter);
                    command.Parameters[19].Value = desc.Calibr_9;

                    command.Parameters.Add(structure.HistoryTable["calibr_10"].Parameter);
                    command.Parameters[20].Value = desc.Calibr_10;

                    command.Parameters.Add(structure.HistoryTable["snd_avar"].Parameter);
                    command.Parameters[21].Value = desc.Snd_avar;

                    command.Parameters.Add(structure.HistoryTable["snd_max"].Parameter);
                    command.Parameters[22].Value = desc.Snd_max;

                    command.Parameters.Add(structure.HistoryTable["graf_switch"].Parameter);
                    command.Parameters[23].Value = desc.Graf_switch;

                    command.Parameters.Add(structure.HistoryTable["graf_diapz"].Parameter);
                    command.Parameters[24].Value = desc.Graf_diapz;

                    command.Parameters.Add(structure.HistoryTable["graf_min"].Parameter);
                    command.Parameters[25].Value = desc.Graf_min;

                    command.Parameters.Add(structure.HistoryTable["graf_max"].Parameter);
                    command.Parameters[26].Value = desc.Graf_max;

                    command.Parameters.Add(structure.HistoryTable["contr_par"].Parameter);
                    command.Parameters[27].Value = desc.Contr_par;

                    command.Parameters.Add(structure.HistoryTable["res_str"].Parameter);
                    command.Parameters[28].Value = desc.Res_str;

                    command.Parameters.Add(structure.HistoryTable["res_float1"].Parameter);
                    command.Parameters[29].Value = desc.Res_float1;

                    command.Parameters.Add(structure.HistoryTable["res_float2"].Parameter);
                    command.Parameters[30].Value = desc.Res_float2;

                    command.Parameters.Add(structure.HistoryTable["res_int1"].Parameter);
                    command.Parameters[31].Value = desc.Res_int1;

                    command.Parameters.Add(structure.HistoryTable["res_int2"].Parameter);
                    command.Parameters[32].Value = desc.Res_int2;

                    command.CommandText = string.Format("Insert Into dbo.{0} Values (@id, @dtCreate, @main_key, @numbe_prm, @name_prm, " +
                        "@type_prm, @val_block_up, @val_block_down, @val_avar, @val_max, @val_min, @calibr_1, @calibr_2, @calibr_3, @calibr_4, " +
                        "@calibr_5, @calibr_6, @calibr_7, @calibr_8, @calibr_9, @calibr_10, @snd_avar, @snd_max, @graf_switch, @graf_diapz, " +
                        "@graf_min, @graf_max, @contr_par, @res_str, @res_float1, @res_float2, @res_int1, @res_int2)", db_parameter.tblHistory);

                    if (command.ExecuteNonQuery() != 1)
                    {
                        throw new Exception("Не удалось добавить описание параметра в БД.");
                    }
                }
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message, ex);
            }
        }
예제 #26
0
        /// <summary>
        /// Удалить параметр из списка
        /// </summary>
        /// <param name="parameter">Удаляемый параметр</param>
        public void Remove(DataBaseParameter parameter)
        {
            bool blocked = false;
            try
            {
                if (mutex.WaitOne(1000))
                {
                    blocked = true;
                    if (count > 0)
                    {
                        for (int index = 0; index < parameters.Length; index++)
                        {
                            if (parameters[index] == parameter)
                            {
                                count = count - 1;
                                parameters[index] = null;

                                CorrectArray();
                                break;
                            }
                        }
                    }
                }
            }
            finally
            {
                if (blocked) mutex.ReleaseMutex();
            }
        }
예제 #27
0
        /// <summary>
        /// Удалить параметр из списка
        /// </summary>
        /// <param name="parameter">Удаляемый параметр</param>
        public void Remove(DataBaseParameter parameter)
        {
            if (slim.TryEnterWriteLock(500))
            {
                try
                {
                    if (count > 0)
                    {
                        for (int index = 0; index < parameters.Length; index++)
                        {
                            if (parameters[index] == parameter)
                            {
                                count = count - 1;
                                parameters[index] = null;

                                CorrectArray();
                                break;
                            }
                        }
                    }
                }
                finally
                {
                    slim.ExitWriteLock();
                }
            }
        }
예제 #28
0
        /// <summary>
        /// Добавить описание параметра
        /// </summary>
        /// <param name="connection">Соединение с которым работать</param>
        /// <param name="db_parameter">Параметр описание которого сохранять в базу данных</param>
        protected void InsertDescriptions(SqlConnection connection, DataBaseParameter db_parameter)
        {
            foreach (DataBaseDescription desc in db_parameter.Descriptions)
            {
                using (SqlCommand command = connection.CreateCommand())
                {
                    command.Parameters.Add(new SqlParameter("id", desc.ID));
                    command.Parameters.Add(new SqlParameter("dtCreate", desc.dtCreate.ToOADate()));

                    command.Parameters.Add(new SqlParameter("main_key", desc.MainKey));
                    command.Parameters.Add(new SqlParameter("numbe_prm", desc.NumberParameter));

                    command.Parameters.Add(new SqlParameter("name_prm", desc.NameParameter));
                    command.Parameters.Add(new SqlParameter("type_prm", desc.TypeParameter));

                    command.CommandText = string.Format("Insert Into dbo.{0} Values (@id, @dtCreate, @main_key, @numbe_prm, @name_prm, @type_prm, " +
                        "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,'','', 0,0,0,0,0, '', 0,0,0,0)", db_parameter.tblHistory);
                    if (command.ExecuteNonQuery() != 1)
                    {
                        throw new Exception("Не удалось добавить описание параметра в БД.");
                    }
                }
            }
        }
예제 #29
0
        private int position = -1; // позиция в массиве при переборе коллекции

        #endregion Fields

        #region Constructors

        /// <summary>
        /// Инициализирует новый экземпляр класса
        /// </summary>
        /// <param name="list">Список параметров для которого создается перечислитель</param>
        internal DB_PEnumerator(DataBaseParameter[] list)
        {
            parameters = list;
        }
예제 #30
0
        /// <summary>
        /// Загрузить описание параметра из БД
        /// </summary>
        /// <param name="db_parameter">Параметр для которого загрузить описание</param>
        private void LoadParameterDescription(DataBaseParameter db_parameter)
        {
            SqlConnection connection = null;
            try
            {
                string sql_query = string.Format("SELECT * FROM {0}", db_parameter.tblHistory);

                connection = new SqlConnection(adapter.ConnectionString);
                connection.Open();

                if (connection.State == ConnectionState.Open)
                {
                    using (SqlCommand command = new SqlCommand(sql_query, connection))
                    {
                        using (SqlDataReader result = command.ExecuteReader())
                        {
                            if (result != null)
                            {
                                if (result.IsClosed == false)
                                {
                                    while (result.Read())
                                    {
                                        DataBaseDescription db_description = new DataBaseDescription();

                                        db_description.ID = result.GetInt32(0);
                                        db_description.dtCreate = DateTime.FromOADate(result.GetDouble(1));

                                        db_description.MainKey = result.GetInt32(2);
                                        db_description.NumberParameter = result.GetInt32(3);

                                        db_description.NameParameter = result.GetString(4);
                                        db_description.TypeParameter = result.GetString(5);

                                        db_parameter.Descriptions.Add(db_description);
                                    }
                                }
                            }
                            else
                                throw new Exception("Не удалось считать данные описания параметра");
                        }
                    }
                }
                else
                    throw new Exception("Не удалось подключиться к серверу БД.");
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message, ex);
            }
            finally
            {
                if (connection != null)
                {
                    if (connection.State == ConnectionState.Open)
                    {
                        connection.Close();
                    }

                    connection.Dispose();
                }
            }
        }
예제 #31
0
        /// <summary>
        /// Добавить параметр в загруженную БД
        /// </summary>
        /// <param name="Identifier">Идентификатор параметра</param>
        /// <param name="Name">Имя параметра</param>
        public void InsertParameter(Guid Identifier, String Name)
        {
            bool blocked = false;
            try
            {
                if (mutex.WaitOne(1000))
                {
                    blocked = true;
                    if (state == DataBaseState.Loaded || state == DataBaseState.Saving)
                    {
                        DataBaseParameter parameter = new DataBaseParameter();
                        DataBaseDescription description = new DataBaseDescription();

                        parameter.Identifier = Identifier;

                        description.NameParameter = Name;
                        parameter.Descriptions.Add(description);

                        dataBase.Insert(parameter);
                    }
                    else
                        throw new InvalidOperationException("База данных не загружена.");
                }
                else
                    throw new TimeoutException();
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message, ex);
            }
            finally
            {
                if (blocked) mutex.ReleaseMutex();
            }
        }
예제 #32
0
파일: DataBase.cs 프로젝트: slawer/skc
        /// <summary>
        /// Создать таблицу значений параметра
        /// </summary>
        /// <param name="connection">Соединение с которым работать</param>
        /// <param name="transaction">Транзакция через которую осуществлять запись в БД</param>
        /// <param name="db_parameter">Параметр, который добавить в БД</param>
        protected void CreateParameterValuesTable(SqlConnection connection, SqlTransaction transaction,
            DataBaseParameter db_parameter)
        {
            try
            {
                SqlCommand command = connection.CreateCommand();
                command.Transaction = transaction;

                command.CommandText = string.Format(structure.ValuesTable.SqlQueryForCreateTable, db_parameter.tblValues);
                command.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message, ex);
            }
        }