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

时间:2015-09-03 05:20:44

标签: c# .net sql-server-2008

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

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

有人可以为此提供帮助吗?

另外,我想知道如何使用.Net代码

将timestamp参数传递给存储过程

1 个答案:

答案 0 :(得分:1)

IndexOutOfRangeException上的

reader.Getordinal()表示名为Timestamp的列不存在。再次检查列名称,并替换为实际值。默认情况下,它会被称为timestamp,但前提是您尚未指定列名。

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

根据MSDNTIMESTAMP数据类型为" 8个字节... [和] ...只是一个递增的数字,不保留日期或时间。要记录日期或时间,请使用日期时间数据类型。"

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

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

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

(注意:我还没有对此进行测试,但它应该足够接近)。

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