如何使用DataReader
从SQL Server检索时间戳值(例如:0x000000048E18B9D8)?这样做时,我得到IndexOutOfRangeException
DateTime date = reader.GetDateTime(reader.GetOrdinal("Timestamp"));
有人可以为此提供帮助吗?
另外,我想知道如何使用.Net代码
将timestamp参数传递给存储过程答案 0 :(得分:1)
IndexOutOfRangeException
上的 reader.Getordinal()
表示名为Timestamp
的列不存在。再次检查列名称,并替换为实际值。默认情况下,它会被称为timestamp
,但前提是您尚未指定列名。
您也可以尝试string ts = reader["timestamp"].toString()
,并确保它返回一些内容。
根据MSDN,TIMESTAMP
数据类型为" 8个字节... [和] ...只是一个递增的数字,不保留日期或时间。要记录日期或时间,请使用日期时间数据类型。"
因此,reader.GetInt64()
可能很接近,如果你真的需要这个值,但byte[] myTimestamp = reader["timestamp"]
可能更好。
只要将其传递回存储过程,您就可以使用SqlDbType.Timestamp
创建一个新参数。该值将是一个字节数组,或者,如果您将其存储为字符串,则可以尝试类似:
cmd.Parameters.Add("@TimeStampParam", SqlDbType.Timestamp).Value = System.Text.Encoding.ASCII.GetBytes(myTimestampStr);`
(注意:我还没有对此进行测试,但它应该足够接近)。
请注意,TIMESTAMP
已弃用,ROWVERSION
不是首选语法。