0

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ステートメントを受け入れる唯一の方法です。

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 に答える