2017-10-28 71 views
0

我想开一个SQLite数据库表,这是像这样创建时获得不正确的值long类型的列线,以打开和阅读该表:我试图读取SQLite数据库

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

SQLite是完全能够存储一个NET DateTime值。它还有一个选项可将它们存储为UnixEpoch值,因此您不必进行任何转换。 – Plutonix

+0

@Plutonix: 我需要另一种方式。 sqldataadapter为列返回错误的类型(int而不是long) –

+0

.NET SQLite提供程序知道如何将基本SQLIte类型转换为.NET数据类型。您没有利用该功能以DateTime值的长列开始。见** [SQLite的不存储小数正确(https://stackoverflow.com/q/44298684/1070452)** – Plutonix

回答

0

好吧,在互联网上有点研究后,我找到了解决办法。 我用

SQLiteCommand cmd = new SQLiteCommand("select datetime(Timestamp/1000, 'unixepoch'), Timestamp from Averaged", con); 

以获取时间戳列

由于这种方法也适用于该表中的正确日期时间格式,另一个表中这是行不通的。

CREATE TABLE TRIPS (TSDEB INT, TSFIN INT, NBSEC INT, NKMS INT, PRIMARY KEY (TSDEB)) 

虽然列都是int类型,有些人是float类型,但SQLite的DataAdapter的不能确定正确的数据类型在C#DataTable对象使用。所以我得到截断值(28“公里”,而不是28.2​​52“公里”)...

所以我需要更多的帮助!