sqlite专家个人错误的日期时间

时间:2014-05-02 08:50:03

标签: c# sqlite

我正在尝试从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();

感谢您的帮助。

2 个答案:

答案 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用作“默认”日期。

来自Date And Time Functions

  

日期和时间函数使用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");