为什么CONVERT(DATETIME, '2012-04-14 21:42:58.000', 120)
?您是否将 startTime 作为字符串传递?这可能是个问题。startTime.ToString() (在 C# 中)可能会产生比您预期的另一种格式?您是否使用动态 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 PROCEDURE
C# 中并执行存储过程,而不是使用动态 SQL。
我不知道在 SQL CE 中是否可行,但在完整版中,您拥有 SQL Profiler,它使您能够捕获和检查应用程序发送到 SQL Server 的查询。