예제 #1
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();
              }
        }
예제 #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 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);
              }
        }