Пока я читаю полную таблицу данных с помощью метода Fill () из SQLiteDataAdapter , я получаю исключение «Строка не распознается как допустимая дата и время».
Исключение генерируется при чтении столбца типа DATETIME NOT NULL
, который содержит Unix отметки времени эпохи в миллисекундах. И да, я знаю, что в SQLite нет определенного типа c DateTime. Я знаю (из sqlite, выбрасывающего строку «Строка не распознается как действительное datetime» ), что я могу адаптировать ConnectionString и установить «DateTimeFormat = UnixEpoch».
Но этот параметр интерпретирует значение как секунды не миллисекунд с 1 января 1970 года.
Все равно его использование приводит к ArgumentOutOfRangeException
. Для строки подключения есть еще один параметр: DateTimeFormatString
. Но я не вижу возможности использовать его с моим форматом.
Я не могу изменить данные в таблице. И я также не хочу перечислять столбцы вручную. Есть ли простой способ заполнить таблицу "select * from ..."? Также было бы полезно просто читать его как строку. Существует обходной путь с «DateTimeFormat = Ticks», но это уродливое решение, потому что оно не основано на 1 января 1970 года.
Любая помощь будет принята с благодарностью.
С уважением
Я сократил свой код до минималистичного c примера, чтобы продемонстрировать поведение.
using System.Data;
using System.Data.SQLite;
namespace SQLite
{
public class Program
{
public static void Main()
{
//using (var connection = new SQLiteConnection(@"Data Source=d:\src\C#\SQLite\SQLite\db\sampledb.db; DateTimeFormat=Ticks;"))
using (var connection = new SQLiteConnection(@"Data Source=d:\src\C#\SQLite\SQLite\db\sampledb.db; DateTimeFormat=UnixEpoch;"))
{
connection.Open();
using (var sqlDataAdapter = new SQLiteDataAdapter("SELECT * FROM TimeStamps;", connection))
{
var dataTable = new DataTable();
sqlDataAdapter.Fill(dataTable);
}
}
}
}
}
Кроме того, теперь БД содержит только одну таблицу. Обе даты, т.е. 1586948400000, относятся к 2020 году.
Таблица в образце БД
Приведенный выше код дает ArgumentOutOfRangeException
. Если код выполняется с DateTimeFormat=Ticks
в ConnectionString, он запускается, но создает неправильные календарные даты.
Таблица была создана с этим SQL:
CREATE TABLE "TimeStamps" (
"Id" INTEGER,
"TimeStamps" DATETIME,
PRIMARY KEY("Id")
)