我想打开一个SQLite数据库表,它是这样创建的:
CREATE TABLE AVERAGED
(
TIMESTAMP INT,
ID INT,
KEY REAL,
VALUE REAL,
SAMPLES INT,
PRIMARY KEY (TIMESTAMP, ID, KEY)
)
在我的C#代码中,我使用这些行来打开并阅读表格:
SQLiteConnection con = new SQLiteConnection("Data Source=" + @"d:\_hybridassistant\Backup\hybridassistant.db" + ";Version=2;");
con.Open();
SQLiteCommand cmd = new SQLiteCommand("select * from Averaged", con);
// SQLiteCommand cmd = new SQLiteCommand("select Timestamp+0 as Timestamp, ID , KEY, VALUE, SAMPLES from Averaged", con);
SQLiteDataAdapter da = new SQLiteDataAdapter(cmd);
DataSet ds = new DataSet();
da.Fill(ds);
foreach (DataRow dr in ds.Tables[0].Rows)
{
Debug.WriteLine(new DateTime(((long) dr[0])/1000)); // divide by 1000 because timestamp is in milliseconds since 01.01.1970
}
SQLiteCommand
的有效行返回TIMESTAMP
列的错误值(甚至是负值)。如果我使用第二条SQLiteCommand
行,则时间值似乎是正确的。
答案 0 :(得分:0)
好的,经过互联网上的一些研究后,我找到了解决方案。 我用
SQLiteCommand cmd = new SQLiteCommand("select datetime(Timestamp / 1000, 'unixepoch'), Timestamp from Averaged", con);
获取timestamp列的正确日期时间格式
由于此方法适用于此表,因此在另一个表中它不起作用。
CREATE TABLE TRIPS (TSDEB INT, TSFIN INT, NBSEC INT, NKMS INT, PRIMARY KEY (TSDEB))
尽管列都是int类型,但有些列必须是float类型,但sqlite dataadapter无法确定要在C#Datatable对象中使用的正确数据类型。所以我得到截断值(28“km”而不是28.252“km”)......
所以我需要更多的帮助!