0

我能够将 TIMESTAMP 作为字符串插入到我的表中,但是当我读出它时,我的程序引发了一个错误,提示“字符串未被识别为有效的 DateTime”。

这是我将值插入表中的方法。

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 语句的唯一方式。

4

1 回答 1

1

传递 SQLite 识别的日期格式,例如:

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

此 SQLite 手册页上的其他有效格式。

更好的是使用参数,例如:

sqlstr := 'INSERT INTO ALARMS (ALARMTIME) VALUES ($dt);';
...
mycommand.Parameters.AddWithValue("$dt", DateTime.Now);
于 2012-07-26T19:08:54.690 回答