/// <summary> /// Возвращает значение указанного параметра. /// </summary> /// <param name="id">Идентификатор параметра, значение которого следует получить.</param> public string this[InfoId id] { get { if (!this.Items.ContainsKey(id)) { // нет в памяти данных для этого ключа, получаем из базы this.Items.Add(id, this.GetValue(id)); } return this.Items[id]; } }
/// <summary> /// Проверяет, является ли текущий экземпляр эквивалентом указанному экземпляру <see cref="InfoId"/>. /// </summary> /// <param name="value">Экземпляр <see cref="InfoId"/>, с которым следует провести сравнение.</param> public bool Equals(InfoId value) { return this.Value.Equals(value.Value); }
/// <summary> /// Получает из базы и возвращает значение по указанному ключу. /// </summary> /// <param name="key">Ключ, значение для которого следует получить.</param> private string GetValue(InfoId id) { using (var client = new SqlDbCeClient(this.CurrentUser.ConnectionString)) { client.CommandText = "SELECT [value] FROM [info] WHERE [id_info] = @id"; client.Parameters.Add("@id", SqlDbType.SmallInt).Value = Convert.ToInt16(id); object result = client.ExecuteScalar(); if (result == DBNull.Value) { return null; } return Convert.ToString(result); } }
/// <summary> /// Добавляет, либо обновляет информацию. /// </summary> /// <param name="id">Идентификатор записи (см. список констант).</param> /// <param name="value">Значение, не более 30 символов.</param> /// <param name="nodb">Позволяет запретить запись данных в базу. По умолчанию значение <c>false</c> - данные в базу записываются сразу.</param> /// <remarks> /// <para> /// Если значение параметра <paramref name="nodb"/> равно <c>true</c>, то запись изменений в базу будет произведена только при вызове метода <see cref="Flush"/>. /// </para> /// </remarks> public void Set(InfoId id, string value, bool nodb = false) { if (!String.IsNullOrEmpty(value) && value.Length > 30) { //throw new ArgumentOutOfRangeException(value); value = value.Substring(30); } // добавляем или меняем if (!this.Items.ContainsKey(id)) { this.Items.Add(id, value); } else { this.Items[id] = value; } // если запрещено сохранение в базу, выходим if (nodb) { if (!this.ToSave.Contains(id)) { this.ToSave.Add(id); } return; } using (var client = new SqlDbCeClient(this.CurrentUser.ConnectionString)) { client.CommandText = "SELECT COUNT([id_info]) FROM [info] WHERE [id_info] = @id"; client.Parameters.Add("@id", SqlDbType.SmallInt).Value = Convert.ToInt16(id); client.Parameters.Add("@value", SqlDbType.NVarChar, 30).Value = value; if (Convert.ToInt32(client.ExecuteScalar()) == 0) { // добавляем client.CommandText = "INSERT INTO [info] ([id_info], [value]) VALUES (@id, @value)"; } else { // обновляем client.CommandText = "UPDATE [info] SET [value] = @value WHERE [id_info] = @id"; } client.ExecuteNonQuery(); } }
/// <summary> /// Добавляет, либо обновляет информацию. /// </summary> /// <param name="id">Идентификатор записи (см. список констант).</param> /// <param name="value">Значение, не более 20 символов.</param> /// <param name="nodb">Позволяет запретить запись данных в базу. По умолчанию значение <c>false</c> - данные в базу записываются сразу.</param> public void Set(InfoId id, Version value, bool nodb = false) { this.Set(id, value.ToString(), nodb); }
/// <summary> /// Добавляет, либо обновляет информацию. /// </summary> /// <param name="id">Идентификатор записи (см. список констант).</param> /// <param name="value">Значение, не более 20 символов.</param> public void Set(InfoId id, DateTime value, bool nodb = false) { this.Set(id, value.ToString(), nodb); }