How Do I Read A Rowversion or Timestamp SQL Server Data Type From a SQLDataReader to a C# Variable

后端 未结 2 1931
一生所求
一生所求 2021-01-19 01:37

I have a SQL Server 2012 database. Each table has a set of audit fields. One is a column named RowVer with a datatype of timestamp (same as rowversion

相关标签:
2条回答
  • 2021-01-19 01:54

    One option is to handle this at the SQL level with the CONVERT() function, where it maps nicely to BIGINT:

    CONVERT(BIGINT, MyRowVersionColumn)
    

    And now you can read it easily into an Int64:

    user.RowVersion = rdr.GetInt64(18);
    

    That will, of course, mean changing the datatype of your object, but you may that this is a good thing.

    If you want to keep the byte array, you can do this:

    rdr.GetBytes(18, 0, user.RowVersion, 0, rdr.GetBytes());
    

    Or, since the length of the field is known:

    rdr.GetBytes(18, 0, user.RowVersion, 0, 8);   
    
    0 讨论(0)
  • 2021-01-19 01:55

    If you are using .NET 4.5 or newer you can do

    user.RowVersion = rdr.GetFieldValue<byte[]>(18);
    

    If you are on 4.0 or older you will need to perform a cast.

    user.RowVersion = rdr.GetValue(18) as byte[];
    
    0 讨论(0)
提交回复
热议问题