比较C#中的TimeStamp值

时间:2014-10-17 09:40:14

标签: c# sql-server-2008 linq-to-sql concurrency

我在现有数据库中创建了一个新列,允许我使用RowVersion进行并发操作:

alter table MyTable add ColumnName rowversion

在我班上我添加了以下属性

public byte[] ColumnName { get; set; }

在使用此类的一个方法中,使用此属性时会出现错误

无法隐式转换类型&System; System.Data.Linq.Binary'到' byte []'

我通过向物业添加ToArray (myObj.ColumnName.ToArray())来克服这一点。

在我的ASP .Net页面中,我向Repeater添加了一个隐藏控件,并将值指定为

RowHiddenField.Value = Convert.ToBase64String(myObj.ColumnName);

现在我正在尝试将此列与

中传递的对象进行比较
public bool RowModified(MyObject myObj)

objFound = GetAllObjects.First(o=> o.ID = myObj.ID);

If (objFound.ColumnName == myObj.ColumnName)

但价值观永远不变?

在阅读转换TimeStamp的几个链接后,我尝试了它们,但要么它们没有工作(可能是我感到困惑并做错了什么),或者它不适用于我的场景。

感谢您的任何帮助。

1 个答案:

答案 0 :(得分:0)

我对SQL rowversion格式一无所知。似乎mss在评论中提供的链接将帮助您,如果您关心它。

但是如果你关心的只是相等,那么仅仅比较两个byte []对象就足够了。您的代码的问题是数组不会覆盖Equals()或提供==重载。所以使用==只比较两个对象引用,它们总是相同的。

有关如何正确(和轻松)比较两个数组的详细信息,请参阅此前提出的问题: Easiest way to compare arrays in C#