mssql日期超时集未重新定义
本文关键字:定义 新定义 日期 超时 mssql | 更新日期: 2023-09-27 18:26:54
我从数据库中获取值,将它们保存在列表中,更改值并更新数据库。没有显示错误消息。
数据库中的值保存如下->"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}当我将字符串日期格式更改为"yyyy-MM-dd HH:MM:ss zzz"时我犯了一个错误。字符串未被识别为有效的DateTime。我还尝试了CAST(@DATETIME作为datetimeoffset(7)),但什么也没发生。Datebase中的Datetype是datetimeoffset(3)
有什么想法吗?
根据您提供的样本,数据库中有毫秒精度的值,但您解析字符串中的值的精度只有整秒。
2014-07-11 06:35:09.343 +00:00 != 2014-07-11 06:35:09 +00:00
这些不可能相等,因为一侧与另一侧相差343毫秒。
一般来说,使用精确相等来匹配如此精确的时间戳不是一个好主意。相反,考虑范围匹配。如果你知道你有整秒的值,你可以匹配整秒开始的值>=和<下一整秒钟的开始。
再说一遍,你的where子句中似乎已经有一个ID了。如果这确实是一个唯一的标识符,那么根本不需要在时间戳上进行匹配。