我有一张桌子,其中的日期时间格式为:
2011-07-01 15:17:33.357
当我在对象上执行.ToString()时,我正在使用c#DateTime我将以格式获取DateTime:
04/07/2011 06:06:17
我想知道我是如何正确传递正确的DateTime的,因为当我运行我们代码中的SQL时它不起作用(即选择正确的DateTime)。我无法使用SQL分析器。
这是代码:
//looks to if a user has had any activity in within the last time specified
public bool IsUserActivitySinceSuppliedTime(int userId, DateTime since)
{
//get everything since the datetime specified [usually 5 hours as this is
//how long the session lasts for
string sql = "SELECT * FROM tbl_webLogging WHERE userid = @userid AND DateAdded > @sinceDateTime";
SqlParameter sinceDateTimeParam = new SqlParameter("@sinceDateTime", SqlDbType.DateTime);
sinceDateTimeParam.Value = since;
SqlCommand command = new SqlCommand(sql);
command.Parameters.AddWithValue("@userid", userId);
command.Parameters.Add(sinceDateTimeParam);
using (SqlDataReader DataReader = GetDataReader(command))
{
if (DataReader.HasRows)
{
return true;
}
else
{
return false;
}
}
}
UPDATE *******************
我在数据上运行了以下内容:
SELECT * FROM tbl_webLogging
WHERE userid = 1
AND DateAdded > '2011-07-01 07:19:58.000'
和
SELECT * FROM tbl_webLogging
WHERE userid = 1
AND DateAdded > '04/07/2011 07:19:58'
一个返回53个记录,另一个返回69个记录。怎么会这样?当我将日期时间(04/07/2011 07:19:58)从c#传递给SQL时,根本没有任何记录显示!
答案 0 :(得分:22)
您已使用DateTime
参数和DateTime
中的值正确完成了此操作,因此 应该 已经有效。忘记ToString()
- 因为这里没有使用。
如果存在差异,则最有可能在两种环境之间进行不同的精确度;也许选择一个舍入(秒,可能?)并使用它。还要记住UTC / local / unknown(DB没有“类型”日期的概念; .NET确实如此。)
我有一张桌子,其中的日期时间格式为:
2011-07-01 15:17:33.357
请注意,数据库中的日期时间不是任何此类格式;这只是你的查询客户端显示你的白色谎言。它存储为数字(甚至是实现细节),因为人们有这种奇怪的倾向,没有意识到你显示的日期与40723.6371916281
相同。愚蠢的人类。通过将其简单地视为“日期时间”,您不应该遇到任何问题。
答案 1 :(得分:7)
我遇到了很多涉及C#和SqlServer的问题。我最终做了以下事情:
还要确保所有机器都在同一时区运行。
关于您获得的不同结果集,您的第一个示例是“July First”,而第二个示例是“7月4日” ...
此外,第二个示例也可以解释为“4月7日”,这取决于您的服务器本地化配置(我的解决方案不会遇到此问题)。
编辑:hh被替换为HH,因为它似乎没有捕获具有AM / PM的系统上的正确小时,而不是具有24小时时钟的系统。请参阅以下评论。