2012-04-01 82 views
0

之间有什么格式的区别:SQL Server CE的时间戳移交

DateTime datetimenow = DateTime.Now.ToLocalTime(); 

long ticks = 634687637580000000; 
DateTime createdTimestamp = new DateTime(ticks).ToLocalTime(); 

这导致SQL Server CE抛出错误

在有错误日期格式的一部分。 [表达式(如果 已知)=]

我试图插入两个时间戳到SQL Server CE数据库中。当前日期时间和过去的日期时间。当前日期和时间(现在)可以插入到表格中的两个目标字段中,但是当我使用createdTimestamp时,会引发上述错误。

当我在调试中查看当地人的格式是,正好是两者相同。

目标字段都是datetime数据类型。

为什么可能会引发此错误?

编辑:

我只是发现它似乎只影响时间戳过去。现在和未来的时间戳工作正常。

编辑:添加SQL插入代码。

查询是由我自己的SQL Server CE类动态构建的。

{INSERT timeline (TweetID,Author,TimestampOfTweet,TimestampOfCollected,TweetText) VALUES ('185941815562739713','twitterapi','15/12/2011 13:52:39','01/04/2012 15:58:58','TweetDeck access - Update : This issue has been resolved. http://t.co/2yub0tYL')} 

执行代码:

//Take built statement and apply to command text 
cmd.CommandText = buildSqlStatement.ToString(); 

//execute insert 
try 
{ 
    cmd.Connection = sqlConn; 
    sqlConn.Open(); 
    int rows = cmd.ExecuteNonQuery(); 
    string results = Convert.ToString(rows); 
    return results; 
} 
catch(Exception ex) 
{ 
    return ex.Message; 
} 
finally 
{ 
    sqlConn.Close(); 
} 
+0

你没有显示你如何*使用*值。请显示与SqlCE的交互。如果直接包含该值,请尝试使用参数化SQL。 – 2012-04-01 14:50:47

+0

以上更新。它使用我自己的SQLCE类。 – Damo 2012-04-01 15:02:19

+1

那么回到我以前的观点,你应该使用参数化的SQL语句。然后司机会为你处理转换。 – 2012-04-01 15:07:08

回答

3

决不包括值直接在SQL - 始终使用参数SQL来代替。

优点:从数据的 “代码”(所述SQL)

  • 清洁分离(的值)
  • 防护SQL injection attacks
  • 避免了易于出错的转化如在这个问题。