2012-07-26 39 views
0

我能夠將TIMESTAMP作爲一個字符串插入到我的表中,但是當我將它讀出來時,程序產生了一個錯誤,提示「字符串未被識別爲有效的DateTime」。如何在SQLite中使用SQL語句插入和檢索TIMESTAMP字段?

下面是我如何在表格中插入我的值。

sqlstr := 'INSERT INTO ALARMS (ALARMTIME) VALUES ("'+DateTime.Now.ToString+'");'; 
cnn := new SQLiteConnection('Data Source=AlarmLog.s3db'); 
cnn.Open; 
var mycommand := new SQLiteCommand(cnn); 
mycommand.CommandText := sqlstr; 
var info := mycommand.ExecuteNonQuery; 
cnn.Close; 

這裏是我讀出來的。

sqlstr := 'SELECT * from ALARMS'; 
    var dt := new DataTable; 
    cnn := new SQLiteConnection('Data Source=AlarmLog.s3db'); 
    cnn.Open; 
    var mycommand := new SQLiteCommand(cnn); 
    mycommand.CommandText := sqlstr; 
    var reader := mycommand.ExecuteReader; 
    dt.Load(reader); <---------------------Here is where I am getting the error, "String was not recognized as a valid DateTime." 
    reader.Close; 
    cnn.Close; 

我知道爲什麼我收到了錯誤,但爲什麼我不能插入TIMESTAMP的日期和時間,而不是字符串或文本類型。如果你在我的SQL查詢中注意到,我在DateTime.Now.ToString語句周圍有引號。這是它接受我的SQL語句的唯一方式。

+0

[SQLite沒有存儲類預留用於存儲日期和/或時間。](http://www.sqlite.org/datatype3.html) – Andomar 2012-07-26 19:51:59

+0

@Andomar,基本上這意味着您必須將datetime轉換爲字符串並將其傳遞給您表。爲了檢索,您需要將其作爲字符串讀取並轉換爲實際的日期時間值。 – ThN 2012-07-26 20:14:16

+0

是的,當然,如果你選擇了SQLite和.NET都能理解的格式,它也會有所幫助。 'yyyy-MM-ddTHH:mm:ss'是一種通用格式。 – Andomar 2012-07-27 05:45:34

回答

1

傳遞SQLite的認識,就像一個日期格式:

DateTime.Now.ToString("yyyy-MM-ddTHH:mm") 

Other valid formats on this SQLite manual page.

更妙的是使用參數,如:

sqlstr := 'INSERT INTO ALARMS (ALARMTIME) VALUES ($dt);'; 
... 
mycommand.Parameters.AddWithValue("$dt", DateTime.Now); 
+0

謝謝,我做了你的建議,它的工作原理。 – ThN 2012-07-27 16:17:58

相關問題