如何正确地将日期时间从c#传递给sql?

我有一张表,其中的日期时间格式为:

2011-07-01 15:17:33.357 

当我在对象上执行.ToString()时,我正在接受ac#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个记录。 怎么会这样? 当我将DateTime(04/07/2011 07:19:58)从c#传递给SQL时,根本没有任何记录出现!

您已经使用DateTime参数和DateTime的值正确完成了它,因此它应该已经可以使用了。 忘记ToString() – 因为这里没有使用。

如果存在差异,则最有可能在两种环境之间进行不同的精确度; 也许选择舍入(秒,可能?)并使用它。 还要记住UTC / local / unknown(DB没有“类型”日期的概念; .NET确实如此)。

我有一张桌子,其中的日期时间格式为: 2011-07-01 15:17:33.357

请注意, 数据库中的日期时间不是任何此类格式; 这只是你的查询客户端显示你的白色谎言。 它存储为一个数字 (甚至是一个实现细节),因为人类有这种奇怪的倾向,没有意识到你显示的日期与40723.6371916281相同。 愚蠢的人类。 通过简单地将其视为“日期时间”,您不应该遇到任何问题。

我有很多涉及C#和SqlServer的问题。 我最终做了以下事情:

  1. 在SQL Server上,我使用DateTime列类型
  2. 在c#上我使用.ToString(“yyyy-MM-dd hh:mm:ss”)方法

还要确保所有计算机都在同一时区运行。

关于你得到的不同结果集,你的第一个例子是“七月一日”,而第二个例子是“七月 四日” ……

此外,第二个示例也可以解释为“4月7日”,它取决于您的服务器本地化配置(我的解决方案不会受此问题影响)。