尝试读取sqlite数据库时,我得到long类型的值不正确

时间:2017-10-28 18:33:49

标签: c# sqlite

我想打开一个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行,则时间值似乎是正确的。

1 个答案:

答案 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.2​​52“km”)......

所以我需要更多的帮助!