なぜ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で可能かどうかはわかりませんが、完全版では、アプリからSQLServerに送信されたクエリをキャッチして調べることができるSQLプロファイラーがあります。