/// <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(); } } }
/// <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); } }
/// <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(); } } }
// ---- расширяющие методы ---- /// <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(); } }
/// <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(); } } }
/// <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(); } } }
/// <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); } }
/// <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); } }
/// <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(); } } }
/// <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); } }
/// <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("Не удалось добавить описание параметра в БД."); } } } }
// ---- расширяющие методы ---- /// <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(); } } }
// ---- расширяющие методы ---- /// <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(); }
/// <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(); } }
/// <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); } }
/// <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(); } } }
// ---- расширяющие методы ---- /// <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(); } }
/// <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(); } } }
/// <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(); } } }
/// <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(); } } }
/// <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(); } } }
/// <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(); } }
/// <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); } }
/// <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(); } }
private int position = -1; // позиция в массиве при переборе коллекции #endregion Fields #region Constructors /// <summary> /// Инициализирует новый экземпляр класса /// </summary> /// <param name="list">Список параметров для которого создается перечислитель</param> internal DB_PEnumerator(DataBaseParameter[] list) { parameters = list; }
/// <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(); } } }
/// <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(); } }
/// <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); } }