如何使用DataReader从SQL Server检索时间戳值

本文关键字:检索 时间戳 Server SQL 何使用 DataReader | 更新日期: 2023-09-27 18:10:54

如何从使用DataReader的SQL Server检索时间戳值(例如:0x000000048E18B9D8) ?当我这样做时,我得到了一个IndexOutOfRangeException

DateTime date = reader.GetDateTime(reader.GetOrdinal("Timestamp"));

有人能帮忙吗?

我还想知道如何使用。net代码传递时间戳参数到存储过程

如何使用DataReader从SQL Server检索时间戳值

reader.Getordinal()上抛出IndexOutOfRangeException表明不存在称为Timestamp的列。再次检查列名,并用实际值替换。默认情况下,它将被称为timestamp,但只有在您没有指定列名的情况下。

您也可以尝试string ts = reader["timestamp"].toString(),并确保它返回一些东西。

根据MSDN, TIMESTAMP数据类型是"8 bytes…[and]…"只是一个递增的数字,不保留日期或时间。要记录日期或时间,请使用日期时间数据类型。"

因此,reader.GetInt64()可能是接近的,如果你真的需要这个值,但byte[] myTimestamp = reader["timestamp"]可能更好。

只要将其传递回存储过程,就可以使用SqlDbType.Timestamp创建一个新参数。该值将是一个字节数组,或者,如果您将其存储为字符串,您可以尝试这样做:

cmd.Parameters.Add("@TimeStampParam", SqlDbType.Timestamp).Value = System.Text.Encoding.ASCII.GetBytes(myTimestampStr);`

(注:我还没有测试过,但应该足够接近)。

请注意,TIMESTAMP已弃用,ROWVERSION不是首选语法