예제 #1
0
 /// <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);
       }
 }
예제 #2
0
        /// <summary>
        /// Добавляет, либо обновляет информацию.
        /// </summary>
        /// <param name="items">Коллекция параметров, которые необходимо сохранить.</param>
        /// <param name="nodb">Позволяет запретить запись данных в базу. По умолчанию значение <c>false</c> - данные в базу записываются сразу.</param>
        /// <remarks>
        /// <para>
        /// Если значение параметра <paramref name="nodb"/> равно <c>true</c>, то запись изменений в базу будет произведена только при вызове метода <see cref="Flush"/>.
        /// </para>
        /// </remarks>
        public void Set(Dictionary<InfoId, object> items, bool nodb = false)
        {
            if (items == null || items.Count <= 0)
              {
            return;
              }

              using (var client = new SqlDbCeClient(this.CurrentUser.ConnectionString))
              {
            client.Parameters.Add("@id", SqlDbType.SmallInt);
            client.Parameters.Add("@value", SqlDbType.NVarChar, 30);

            foreach (var id in items.Keys)
            {
              string value = "";

              if (items[id] != null)
              {
            value = items[id].ToString();
              }
              if (value.Length > 30)
              {
            value = value.Substring(30);
              }

              if (!nodb)
              {
            client.CommandText = "SELECT COUNT([id_info]) FROM [info] WHERE [id_info] = @id";

            client.Parameters["@id"].Value = Convert.ToInt16(id);
            client.Parameters["@value"].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();
              }
              else
              {
            if (!this.ToSave.Contains(id))
            {
              this.ToSave.Add(id);
            }
              }

              // в текущий экземпляр
              if (!this.Items.ContainsKey(id))
              {
            this.Items.Add(id, value);
              }
              else
              {
            this.Items[id] = value;
              }
            }
              }
        }
예제 #3
0
        public List<InfoItem> GetAllInfo()
        {
            var constants = new Dictionary<short, string>();

              using (var client = new SqlDbCeClient(this.CurrentUser.ConnectionString))
              {
            client.CommandText = "SELECT * FROM [info] ORDER BY [id_info]";
            var result = client.GetEntities<InfoItem>();

            // добвавляем к результату имена констант
            this.GetAllConstants(null, typeof(InfoId), constants);
            foreach (var item in result)
            {
              if (constants.ContainsKey(item.Id))
              {
            item.Name = constants[item.Id];
              }
              else
              {
            if (item.Id <= 99)
            {
              item.Name = String.Format("Initial.{0}", item.Id);
            }
            else if (item.Id > 99 && item.Id <= 199)
            {
              item.Name = String.Format("Stat.{0}", item.Id);
            }
            else if (item.Id > 199 && item.Id <= 499)
            {
              item.Name = String.Format("Reserved.{0}", item.Id);
            }
            else if (item.Id > 499 && item.Id <= 519)
            {
              item.Name = String.Format("Settings.Desktop.{0}", item.Id);
            }
            else if (item.Id > 519 && item.Id <= 559)
            {
              item.Name = String.Format("Settings.Desktop.Incomes.{0}", item.Id);
            }
            else if (item.Id > 559 && item.Id <= 599)
            {
              item.Name = String.Format("Settings.Desktop.Expenses.{0}", item.Id);
            }
            else if (item.Id > 599 && item.Id <= 619)
            {
              item.Name = String.Format("Settings.Mobile.{0}", item.Id);
            }
            else if (item.Id > 619 && item.Id <= 659)
            {
              item.Name = String.Format("Settings.Mobile.Incomes.{0}", item.Id);
            }
            else if (item.Id > 659 && item.Id <= 699)
            {
              item.Name = String.Format("Settings.Mobile.Expenses.{0}", item.Id);
            }
            else if (item.Id > 699 && item.Id <= 719)
            {
              item.Name = String.Format("Settings.Web.{0}", item.Id);
            }
            else if (item.Id > 719 && item.Id <= 759)
            {
              item.Name = String.Format("Settings.Web.Incomes.{0}", item.Id);
            }
            else if (item.Id > 759 && item.Id <= 799)
            {
              item.Name = String.Format("Settings.Web.Expenses.{0}", item.Id);
            }
            else if (item.Id > 799 && item.Id <= 999)
            {
              item.Name = String.Format("Settings.Reserved.{0}", item.Id);
            }
            else if (item.Id > 999 && item.Id <= 9999)
            {
              item.Name = String.Format("Custom.{0}", item.Id);
            }
            else
            {
              item.Name = String.Format("Unknown.{0}", item.Id);
            }
              }
            }
            // --

            return result;
              }
        }
예제 #4
0
        /// <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();
              }
        }
예제 #5
0
        public void EntitiesTest()
        {
            string password = "";
              string filePath = Path.Combine(App.CurrentPath, "test.sdf");
              if (File.Exists(filePath))
              {
            File.Delete(filePath);
              }
              string connectionString = String.Format("Data Source={0}; password={1}", filePath, password);
              SqlDbCeClient.CreateDatabase(connectionString);

              using (var client = new SqlDbCeClient(connectionString))
              {
            client.CommandText = @"CREATE TABLE [accounts] (
              [id_accounts] int IDENTITY (1,1) NOT NULL,
            [id_account_types] int NOT NULL,
            [id_currencies] nvarchar(3) NOT NULL,
            [id_icons] int DEFAULT(0) NOT NULL,
            [account_name] nvarchar(100) NOT NULL,
            [account_details] nvarchar(4000) NOT NULL,
            [total_income_entries] int DEFAULT (0) NOT NULL,
            [total_expense_entries] int DEFAULT (0) NOT NULL,
            [last_operation] datetime NULL,
            [date_created] datetime DEFAULT (GETDATE()) NOT NULL
            );";
            client.ExecuteNonQuery();
            client.CommandText = "ALTER TABLE [accounts] ADD CONSTRAINT [PK_accounts] PRIMARY KEY ([id_accounts]);";
            client.ExecuteNonQuery();
              }

              using (var client = new SqlDbCeClient(connectionString))
              {
            client.QueryProcessing += (sender, e) =>
            {
              var args = (QueryProcessingEventArgs)e;
              Console.WriteLine(args.Status);
            };

            var a = new Account();
            a.CurrencyCode = "RUB";
            a.AccountTypeId = 1;
            a.Details = "test";
            a.IconId = 123;
            a.Id = 0;
            a.Name = "проверка";
            for (int i = 1; i <= 10; i++)
            {
              client.SaveEntities<Account>(a);
              Console.WriteLine("Id: {0} => {1}", a.Id, a.Status);
              Assert.AreEqual(a.Id, i);
              Assert.IsTrue(a.Status == EntityStatus.Created);
              a.Id = 0;
            }

            var aaa = client.GetEntities<Account>("SELECT * FROM accounts");
            Console.WriteLine("Count: {0}", aaa.Count);
            Assert.IsTrue(aaa.Count == 10);

            var a2 = client.GetEntity<Account>("SELECT * FROM accounts WHERE id_accounts = 3");
            Assert.IsTrue(a2.Status == EntityStatus.Loaded);
            a2.Name = "Тест123";
            a2.LastOperation = DateTime.Now;
            client.SaveEntities<Account>(a2);
            Assert.AreEqual(a2.Name, "Тест123");
            Assert.AreEqual(a2.Id, 3);
            Assert.IsTrue(a2.Status == EntityStatus.Updated);

            a2 = client.GetEntity<Account>("SELECT * FROM accounts WHERE id_accounts = 3");
            Assert.AreEqual(a2.Name, "Тест123");
            Assert.AreEqual(a2.Id, 3);

            a2 = client.GetEntity<Account>("SELECT * FROM accounts WHERE id_accounts = 4");
            Assert.AreNotEqual(a2.Name, "Тест123");
            Assert.AreNotEqual(a2.Id, 3);

            a2 = client.GetEntity<Account>("SELECT * FROM accounts WHERE id_accounts = 123");
            Assert.IsTrue(a2 == null);
              }
        }