我从数据库中获取值,将它们保存在List中,更改值并更新数据库。 没有出现错误消息。
数据库中的值保存为这样 - > “2014-07-11 06:35:09.343 +00:00”
string dateformat = "dd.MM.yyyy HH:mm:ss zzz";
foreach (var value in vals)
{
dt = DateTimeOffset.ParseExact(value[0].ToString(),dateformat, CultureInfo.InvariantCulture);
String sqlString = "UPDATE SampleValues " +
"SET Value = @VALUE " +
"WHERE ID = @ID AND SampleTime = @DATETIME";
var sqlCommand = new SqlCommand(sqlString, connection);
sqlCommand.Parameters.Add("@ID", System.Data.SqlDbType.UniqueIdentifier).Value = ID;
sqlCommand.Parameters.Add("@DATETIME", System.Data.SqlDbType.DateTimeOffset).Value = dt;
sqlCommand.Parameters.Add("@VALUE", System.Data.SqlDbType.NVarChar, int.MaxValue).Value = value[1];
var excuter = sqlCommand.ExecuteNonQuery();
}
数据库中没有任何内容得到更新。 解析值时dt = {11.07.2014 06:35:09 +00:00} 当我将字符串dateformat更改为“yyyy-MM-dd HH:mm:ss zzz”时 我收到一个错误。字符串未被识别为有效的DateTime。 我也试过CAST(@DATETIME as datetimeoffset(7))什么也没发生。 Datebase中的Datetype是datetimeoffset(3)
有什么想法吗?
答案 0 :(得分:0)
根据您提供的示例,数据库中的值具有毫秒精度,但您只是从字符串中解析出只有整数秒精度的值。
2014-07-11 06:35:09.343 +00:00 != 2014-07-11 06:35:09 +00:00
这些不能相等,因为一方与另一方相差343毫秒。
通常,使用精确相等来匹配时间戳与精确的精度并不是一个好主意。相反,请考虑范围匹配。如果你知道你有整数秒的值,你可以匹配值> =整秒的开始和<下一整秒的开始。
然后再次 - 看来你的where子句中已经有了一个ID。如果这确实是一个唯一的标识符,则根本不需要匹配时间戳。