Comment insérer et récupérer des champs horodaques à l'aide de l'instruction SQL avec SQLite?

StackOverflow https://stackoverflow.com//questions/11676334

Question

J'ai pu insérer horodatage comme une chaîne dans ma table, mais lorsque je lisai le programme, mon programme augmente une erreur disant "la chaîne n'a pas été reconnue comme une date de date valide"

Voici comment j'insère mes valeurs dans la table.

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;

Voici comment je l'ai lu.

    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;

Je sais pourquoi je reçois l'erreur, mais pourquoi ne puis-je pas insérer l'horodatage comme une date et une heure au lieu de la chaîne ou du type de texte.Si vous remarquez dans ma requête SQL, j'ai des guillemets autour de l'instruction DateTime.Now.Tostring.C'est la seule façon dont il accepte ma déclaration SQL.

Était-ce utile?

La solution

Passer un format de date que SQLite reconnaît, comme:

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

Autres formats valides sur cette page manuelle SQLite.

Encore mieux consiste à utiliser un paramètre, comme:

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top