我正在尝试从c#中的visual studio写入我的sqlite数据库。使用日期时。现在在visual studio中它向我显示了正确的日期和时间,但在写入数据库时,它显示的内容类似于1899/30/12
。这是为什么?这是我的代码:
SQLiteCommand cmd = new SQLiteCommand("INSERT INTO tblLicenseInfo (ID, UserID, MachineID, ExpirationDate, DateOfChange, LicenseKey)
VALUES(1, 1, 1, @test, @test, 'sdfsafge45345345');", SqLite);
cmd.Parameters.Add("@test", DateTime.Now);
SqLite.Open();
cmd.ExecuteNonQuery();
SqLite.Close();
感谢您的帮助。
答案 0 :(得分:1)
DateTime.Now格式不正确,因此您有2个选项:
CURRENT_TIMESTAMP
作为值。这是一个SQLite关键字。或者
DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
答案 1 :(得分:0)
我不太清楚为什么SQLiteParameterCollection.Add(String,Object)
method重载不起作用,因为它说:
在给定的SQLiteParameterCollection中添加一个SQLiteParameter 参数名称和值。
作为替代方案,您可以使用其他重载或AddWithValue
以及
cmd.Parameters.Add("@test", SQLiteType.DateTime).Value = DateTime.Now;
或
cmd.Parameters.AddWithValue("@test", DateTime.Now);
更多信息;
但是等一下......你说你的列类型是DATETIME
,但SQLite
中没有类似的数据类型。
来自Datatypes In SQLite Version 3
SQLite没有为存储日期留出的存储类 和/或时间。相反,SQLite的内置Date And Time Functions 能够将日期和时间存储为TEXT,REAL或INTEGER 值:
- TEXT as ISO8601字符串(“YYYY-MM-DD HH:MM:SS.SSS”)。
- 真实的朱利安日数,即公元前4714年11月24日格林威治中午以来的天数。根据预示 阳历。
- INTEGER as Unix Time,自1970-01-01 00:00:00 UTC以来的秒数。
请告诉您列的真实类型。我认为DateTime.Now
不适合这3种格式(或值),这就是为什么你在SQLite中将1899/30/12
用作“默认”日期。
日期和时间函数使用IS0-8601日期和时间的子集 格式。 date()函数以这种格式返回日期: YYYY-MM-DD。
我觉得如果您将列类型设为TEXT
,并且如果您使用DateTime.Now
格式发送YYYY-MM-dd
,那么您的代码应该有效;
cmd.Parameters.Add("@test", SQLiteType.TEXT).Value = DateTime.Now.ToString("YYYY-MM-dd");