2017-10-28 98 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「公里」)...

所以我需要更多的幫助!