【问题标题】:Comparing TimeStamp value in C#比较 C# 中的时间戳值
【发布时间】:2014-12-12 20:53:12
【问题描述】:

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

alter table MyTable add ColumnName rowversion

在我的课堂上,我添加了以下属性

public byte[] ColumnName { get; set; }

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

无法将类型 'System.Data.Linq.Binary' 隐式转换为 'byte[]'

我通过将 ToArray (myObj.ColumnName.ToArray()) 添加到属性来克服这个问题。

在我的 ASP .Net 页面中,我将隐藏控件添加到中继器并将值分配为

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

现在我正在尝试将此列与传入的对象进行比较

public bool RowModified(MyObject myObj)

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

If (objFound.ColumnName == myObj.ColumnName)

但值永远不会相同?

在阅读了一些转换时间戳的链接后,我尝试了它们,但要么它们不起作用(可能是我感到困惑并且做错了什么),要么它不适用于我的场景。

感谢您对此的任何帮助。

【问题讨论】:

  • 你似乎有很多问题。你的实际问题是什么?
  • 我正在尝试比较从我的隐藏字段传递的值以与当前行版本值进行比较,以查看自页面加载以来数据是否已更改。 @mss 我确实阅读了该链接,但我似乎需要进行重大更改才能实现相同的目的。我不确定是否有更简单的方法,因为我不确定将字节值转换为字符串后如何获取它们?

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


【解决方案1】:

我对 SQL 行版本格式一无所知。如果您关心这一点,似乎 mss 在 cmets 中提供的链接会对您有所帮助。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-09
    • 2017-06-16
    • 1970-01-01
    • 2015-09-22
    • 2017-06-24
    • 2018-03-10
    相关资源
    最近更新 更多