У меня есть база данных SQLite, версия 3, и я использую С# для создания приложения, которое использует эту базу данных.
Я хочу использовать поле timestamp в таблице для concurrency, но я замечаю, что когда я вставляю новую запись, это поле не установлено и равно null.
Например, в MS SQL Server, если я использую поле timestamp, это обновляется базой данных, я не должен сам устанавливать. возможно ли это в SQLite?
Просто объявите значение по умолчанию для поля:
CREATE TABLE MyTable(
ID INTEGER PRIMARY KEY,
Name TEXT,
Other STUFF,
Timestamp DATETIME DEFAULT CURRENT_TIMESTAMP
);
Однако, если ваша команда INSERT
явно устанавливает это поле в NULL
, она будет установлена на NULL
.
Вы можете создать поле TIMESTAMP в таблице на SQLite, см. это:
CREATE TABLE my_table (
id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
name VARCHAR(64),
sqltime TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL
);
INSERT INTO my_table(name, sqltime) VALUES('test1', '2010-05-28T15:36:56.200');
INSERT INTO my_table(name, sqltime) VALUES('test2', '2010-08-28T13:40:02.200');
INSERT INTO my_table(name) VALUES('test3');
Это результат:
SELECT * FROM my_table;
Чтение datefunc рабочим примером автоматического завершения datetime будет:
sqlite> CREATE TABLE 'test' (
...> 'id' INTEGER PRIMARY KEY,
...> 'dt1' DATETIME NOT NULL DEFAULT (datetime(CURRENT_TIMESTAMP, 'localtime')),
...> 'dt2' DATETIME NOT NULL DEFAULT (strftime('%Y-%m-%d %H:%M:%S', 'now', 'localtime')),
...> 'dt3' DATETIME NOT NULL DEFAULT (strftime('%Y-%m-%d %H:%M:%f', 'now', 'localtime'))
...> );
Вставьте несколько строк таким образом, чтобы инициировать автоматическое завершение даты и времени:
sqlite> INSERT INTO 'test' ('id') VALUES (null);
sqlite> INSERT INTO 'test' ('id') VALUES (null);
Сохраненные данные ясно показывают, что первые два являются одинаковыми, но не третьей функцией:
sqlite> SELECT * FROM 'test';
1|2017-09-26 09:10:08|2017-09-26 09:10:08|2017-09-26 09:10:08.053
2|2017-09-26 09:10:56|2017-09-26 09:10:56|2017-09-26 09:10:56.894
Обратите внимание, что функции SQLite окружены в скобках! Насколько сложно было показать это в одном примере?
Удачи!
вы можете использовать пользовательское datetime, используя...
create table noteTable3
(created_at DATETIME DEFAULT (STRFTIME('%d-%m-%Y %H:%M', 'NOW','localtime')),
title text not null, myNotes text not null);
используйте 'NOW', 'localtime', чтобы получить текущую системную дату else, она покажет некоторое прошлое или другое время в вашей базе данных после времени вставки в вашем db.
Спасибо вам...
Чтобы дополнить ответы выше...
Если вы используете EF, украшайте свойство с помощью аннотации данных [Timestamp], затем перейдите к переопределенному OnModelCreating внутри вашего класса контекста и добавьте этот код Fluent API:
modelBuilder.Entity<YourEntity>()
.Property(b => b.Timestamp)
.ValueGeneratedOnAddOrUpdate()
.IsConcurrencyToken()
.ForSqliteHasDefaultValueSql("CURRENT_TIMESTAMP");
Он будет использовать значение по умолчанию для всех данных, которые будут вставляться в эту таблицу.