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

Exi*_*tos 26 c# sql datetime

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

2011-07-01 15:17:33.357
Run Code Online (Sandbox Code Playgroud)

当我在对象上执行.ToString()时,我正在接受ac#DateTime我将以格式获取DateTime:

04/07/2011 06:06:17
Run Code Online (Sandbox Code Playgroud)

我想知道我是如何正确传递正确的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;
                }
            }


        }
Run Code Online (Sandbox Code Playgroud)

UPDATE*******************

我在数据上运行了以下内容:

SELECT * FROM tbl_webLogging 
WHERE userid = 1 
AND DateAdded > '2011-07-01 07:19:58.000'
Run Code Online (Sandbox Code Playgroud)

SELECT * FROM tbl_webLogging 
WHERE userid = 1 
AND DateAdded > '04/07/2011 07:19:58'
Run Code Online (Sandbox Code Playgroud)

一个返回53个记录,另一个返回69个记录.怎么会这样?当我将DateTime(04/07/2011 07:19:58)从c#传递给SQL时,根本没有任何记录出现!

Mar*_*ell 22

你已经通过使用DateTime带有值的参数正确地完成了它DateTime,所以它应该已经有效了.忘了ToString()- 因为这里没有使用.

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

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

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


Ede*_*den 7

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

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

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

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

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

  • 有问题的代码不能用于某种原因,因此更好的解决方案是使代码工作并提供预期的结果.之后有很多事情需要考虑甚至是"更好"的解决方案. (2认同)
  • ..为此,您应使用“ yyyy-MM-dd HH:mm:ss”作为格式字符串(注意,将“ HH”设置为24hr而不是“ hh”设置为12hr),或确保输入在hh:mm:ss之后加上tt,以包含AM / PM。 (2认同)