Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将datetime从c正确地传递到sql?_C#_Sql_Datetime - Fatal编程技术网

C# 如何将datetime从c正确地传递到sql?

C# 如何将datetime从c正确地传递到sql?,c#,sql,datetime,C#,Sql,Datetime,我有一个表,表中的日期时间格式如下: 2011-07-01 15:17:33.357 04/07/2011 06:06:17 当我对对象执行.ToString操作时,我使用的是c DateTime,我获得的DateTime格式为: 2011-07-01 15:17:33.357 04/07/2011 06:06:17 我想知道如何正确地传递正确的日期时间,因为当我运行代码中的SQL时,它不起作用,即选择正确的日期时间。我不能使用SQL分析器 代码如下: //looks to if a u

我有一个表,表中的日期时间格式如下:

2011-07-01 15:17:33.357
04/07/2011 06:06:17
当我对对象执行.ToString操作时,我使用的是c DateTime,我获得的DateTime格式为:

2011-07-01 15:17:33.357
04/07/2011 06:06:17
我想知道如何正确地传递正确的日期时间,因为当我运行代码中的SQL时,它不起作用,即选择正确的日期时间。我不能使用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;
                }
            }


        }
更新*******************

我已对数据运行了以下操作:

SELECT * FROM tbl_webLogging 
WHERE userid = 1 
AND DateAdded > '2011-07-01 07:19:58.000'


一个返回53条记录,另一个返回69条记录。这怎么可能?当我将日期时间04/07/2011 07:19:58从c传递到SQL时,根本没有显示任何记录

您已经通过使用DateTime参数和DateTime中的值正确地完成了这项工作,因此它应该已经工作了。忘记ToString吧,因为这里没有使用它

如果存在差异,最有可能的原因是两种环境之间的精度不同;也许选择一个四舍五入的秒,也许?用这个。还要记住UTC/local/unknown DB对日期类型没有概念。是的

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


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

我遇到了许多涉及C和SqlServer的问题。我最后做了以下几件事:

在SQL Server上,我使用DateTime列类型 在c上,我使用.ToStringyyyy MM dd HH:MM:ss方法 还要确保所有机器在同一时区运行

关于得到的不同结果集,第一个示例是7月1日,第二个示例是7月4日

另外,第二个示例也可以解释为4月7日,这取决于您的服务器本地化配置。我的解决方案不会遇到此问题


编辑:hh被替换为hh,因为与24小时时钟系统相比,它似乎无法在具有AM/PM的系统上捕获正确的小时。请参阅下面的注释。

表中“DateAdded”列的类型是什么?现在是约会时间吗?或者某种类型的varchar?您能确认DateAdded的类型是datetime,而不是[n]varcharx吗?那么为什么c datetime返回时包含0条记录?调试器说它是'04/07/2011 07:19:58'@Maras数据类型是datetime….当您签入调试器时,在运行时您的用户ID是1吗?只是检查一下。对于sql示例,您使用的两个日期不一样:-可能是打字错误?第一个是7月1日,第二个是7月4日。对于c代码:您是否绝对确定传入的值是正确的?只是没有得到任何返回。注:我只是想说。字符串是。。。因为我正在调试器中查找。但是当我运行上面的代码时,它不会得到任何行。我如何调试这个?@Pete2k嗯,有匹配的数据吗?这是一个>vs>=问题吗?ToStringyyyy MM dd hh:MM:ss不是消除歧义的最佳方法;更好的方法是传递类型化数据,因此不存在歧义。问题中的代码比使用ToString。。。有问题的代码由于某种原因无法工作,因此更好的解决方案是让代码工作并提供预期的结果。之后有很多事情要考虑,甚至会有更好的解决方案。我用ToStringyyyy MM ddThh:mm:SS。不知怎的,我总是知道该期待什么。将类型指定为SqlDateTime对我来说一次都不起作用,结果是2012-01-30 AM 10:15:30,而在SQL中是2012-01-30 10:15:30。不太清楚为什么…只有我的2美分。。为此,您应该使用yyyy-MM-dd-HH:MM:ss作为格式字符串。请注意,HH表示24小时,而不是12小时,或者确保在HH:MM:ss之后添加tt以包含AM/PM。using.ToStringyyyy-MM-dd-HH:MM:ss将返回1:00:00作为时间,无论原始日期时间是下午1点还是凌晨1点。SQL将解释为凌晨1点。正如@JoeBrockhaus所说,正确的时间格式是HH:mm:ss