Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/282.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# SQL Server CE:在Where子句中使用DateTime更新语句_C#_Datetime_Sql Server Ce_Sql Update - Fatal编程技术网

C# SQL Server CE:在Where子句中使用DateTime更新语句

C# SQL Server CE:在Where子句中使用DateTime更新语句,c#,datetime,sql-server-ce,sql-update,C#,Datetime,Sql Server Ce,Sql Update,我需要能够更新表中某一行的时间信息。id不是唯一的,因此我还使用startTime列来查找特定的行。我使用的是SQLServerCE和C,所以date对象是C中的DateTime对象 有没有其他方法可以优化这一点?我似乎无法与WHERE子句和startTime匹配?startTime是SQL Server CE中的日期时间数据类型 UPDATE tablename SET endTime = '14/04/2012 9:42:58 PM', duration = '0.052003' WHERE

我需要能够更新表中某一行的时间信息。id不是唯一的,因此我还使用startTime列来查找特定的行。我使用的是SQLServerCE和C,所以date对象是C中的DateTime对象

有没有其他方法可以优化这一点?我似乎无法与WHERE子句和startTime匹配?startTime是SQL Server CE中的日期时间数据类型

UPDATE tablename
SET endTime = '14/04/2012 9:42:58 PM', duration = '0.052003'
WHERE (startTime = CONVERT(DATETIME, '2012-04-14 21:42:58.000', 120)) AND (id= '14363204')
两件事:

从简单的SELECT语句开始,而不是更新。先让它工作起来。 使用日期时间文本。 试试这个:

SELECT *
FROM tablename
WHERE startTime = '2012-04-14 21:42:58.000' AND id = '14363204'
如果这不起作用,最可能的问题是时间不完全匹配。可能的原因包括:

数据库中的日期时间可能以毫秒精度存储,但您的查询使用的值似乎已四舍五入到最接近的秒。这可能会导致匹配失败。 数据库中的日期可能存储在不同的时区。 两件事:

从简单的SELECT语句开始,而不是更新。先让它工作起来。 使用日期时间文本。 试试这个:

SELECT *
FROM tablename
WHERE startTime = '2012-04-14 21:42:58.000' AND id = '14363204'
如果这不起作用,最可能的问题是时间不完全匹配。可能的原因包括:

数据库中的日期时间可能以毫秒精度存储,但您的查询使用的值似乎已四舍五入到最接近的秒。这可能会导致匹配失败。 数据库中的日期可能存储在不同的时区。 为什么转换日期时间,2012-04-1421:42:58.000,120?你把开始时间当作一根绳子传递吗?这可能是个问题。C中的startTime.ToString可能会生成比您预期的格式更多的格式?您使用动态SQL的意思是:在C中以字符串形式构建查询,然后启动它吗

分解查询并检查传递的参数

DECLARE @startTime DATETIME = '2012-04-14 21:42:58.000'
DECLARE @endTime DATETIME = '14/04/2012 9:42:58 PM'
DECLARE @duration DECIMAL = 0.052003
DECLARE @id INT = 14363204

-- debug - check if your input parameters are as expected
SELECT @startTime AS startTime, @endTime AS endTime, @duration AS duration

-- do the update
UPDATE  tablename
SET  endTime = @endTime, duration = @duration
WHERE  startTime = @startTime AND id = @id
我建议您将上述内容封装到CREATE过程中,并从C执行存储过程,而不要使用动态SQL

我不知道在SQL CE中是否可以,但在完整版中,您有SQL Profiler,可以捕获和检查应用程序发送到SQL Server的查询。

为什么使用CONVERTDATETIME,'2012-04-14 21:42:58.000',120?你把开始时间当作一根绳子传递吗?这可能是个问题。C中的startTime.ToString可能会生成比您预期的格式更多的格式?您使用动态SQL的意思是:在C中以字符串形式构建查询,然后启动它吗

分解查询并检查传递的参数

DECLARE @startTime DATETIME = '2012-04-14 21:42:58.000'
DECLARE @endTime DATETIME = '14/04/2012 9:42:58 PM'
DECLARE @duration DECIMAL = 0.052003
DECLARE @id INT = 14363204

-- debug - check if your input parameters are as expected
SELECT @startTime AS startTime, @endTime AS endTime, @duration AS duration

-- do the update
UPDATE  tablename
SET  endTime = @endTime, duration = @duration
WHERE  startTime = @startTime AND id = @id
我建议您将上述内容封装到CREATE过程中,并从C执行存储过程,而不要使用动态SQL


我不知道是否可以在SQL CE中使用,但在完整版中,您有SQL Profiler,可以捕获和检查应用程序发送到SQL Server的查询。

您正在使用120日期样式转换时间,该样式去掉了毫秒。如果startTime值是使用GETDATE生成的,那么它将不匹配

我建议您在处理SQL样式121中的日期时,坚持使用ISO-8601日期格式,因为它不需要转换调用,更重要的是,它不依赖于区域设置,例如,您的代码在法国或德国SQL Server上会失败

UPDATE tablename
SET endTime = '20120414 21:42:58', duration = '0.052003'
WHERE startTime = '20120414 21:42:58.000' AND id = '14363204'

尝试从tablename中选择CONVERTDATETIME,startTime,121,其中id='14363204',以查看是否有毫秒用于要更新的startTime。

您正在使用120日期样式转换时间,该样式去掉毫秒。如果startTime值是使用GETDATE生成的,那么它将不匹配

我建议您在处理SQL样式121中的日期时,坚持使用ISO-8601日期格式,因为它不需要转换调用,更重要的是,它不依赖于区域设置,例如,您的代码在法国或德国SQL Server上会失败

UPDATE tablename
SET endTime = '20120414 21:42:58', duration = '0.052003'
WHERE startTime = '20120414 21:42:58.000' AND id = '14363204'

请尝试从tablename中选择CONVERTDATETIME,startTime,121,其中id='14363204',以查看是否存在要更新的startTime的毫秒。

时间绝对不匹配。在数据库中,其记录为“14/04/2012 8:51:00 PM”。当我尝试匹配相同或甚至“2012-04-14 20:51:00.000”时,select语句上不会显示任何结果。我需要对数据库的精度做一些特殊的操作吗?@Ourx:时间可能以毫秒精度存储,但毫秒可能不会显示。使用时间戳作为ID的一部分通常是一个坏主意,除非你能确保一致地使用相同的时区和精度。时间绝对不匹配。在数据库中,其记录为“14/04/2012 8:51:00 PM”。当我尝试匹配相同或甚至“2012-04-14 20:51:00.000”时,select语句上不会显示任何结果。我需要对数据库的精度做一些特殊的操作吗?@Ourx:时间可能以毫秒精度存储,但毫秒可能不会显示。使用时间戳作为ID的paart通常是一个糟糕的ide a除非您可以确保始终使用相同的时区和精度。