mssql datetimeoffset无法识别

时间:2014-10-16 12:30:01

标签: c# sql-server string parsing datetimeoffset

我从数据库中获取值,将它们保存在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)

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

根据您提供的示例,数据库中的值具有毫秒精度,但您只是从字符串中解析出只有整数秒精度的值。

2014-07-11 06:35:09.343 +00:00   !=    2014-07-11 06:35:09 +00:00

这些不能相等,因为一方与另一方相差343毫秒。

通常,使用精确相等来匹配时间戳与精确的精度并不是一个好主意。相反,请考虑范围匹配。如果你知道你有整数秒的值,你可以匹配值> =整秒的开始和<下一整秒的开始。

然后再次 - 看来你的where子句中已经有了一个ID。如果这确实是一个唯一的标识符,则根本不需要匹配时间戳。