【问题标题】:Storing DataRows independently of a DataTable - RowNotInTableException独立于 DataTable 存储 DataRows - RowNotInTableException
【发布时间】:2011-06-15 08:39:16
【问题描述】:

我正在创建一个 HashMap,将 DataTable 中行的 ID 字段映射到行本身,以缩短一些经常访问的表的查找时间。现在,我有时会收到 RowNotInTableException:

此行已从表中删除,并且没有任何数据。 BeginEdit() 将允许在该行中创建新数据。

在网上浏览了一下之后,似乎 DataRows 不喜欢不附加到 DataTable。即使 DataTable 保留在内存中(不确定 DataRows 是否保留对它的引用,但我肯定仍然在缓存它),是否有可能通过将这些行全部隔离在 HashMap 中来破坏某些东西?这个错误还有什么其他原因?这个帖子 RowNotInTableException when accessing second time 讨论了一个类似的问题,但也没有解决方案。

更新

如果这有什么不同的话,我实际上是在存储 DataRowViews。

【问题讨论】:

    标签: c# asp.net ado.net datatable


    【解决方案1】:

    DataRow 应始终附加到某个 DataTable。即使从 DataTable 中删除,该行仍然具有对该表的引用。

    原因是,表的架构放在 DataTable 中而不是 DataRow 中(以及数据本身)。

    如果您想在没有 DataTables 的情况下快速查找,请使用一些自己的结构而不是 DataRow。

    【讨论】:

    • 好的,但是附加是什么意思?我不破坏原始数据表,我只是将 DataRowViews 的引用存储在一个附加结构中..? (注意更新,我刚刚意识到我存储的是 DataRowViews 而不是 DataRows,这有什么区别吗?)另外,自己的结构不是很好,因为它是常用数据表的通用缓存结构,并为每个表结构也不可能是正确的方式吗?
    • 您确定没有删除该缓存行 (DataRow.Delete())?
    • 不,我永远不会删除一行。我只是读取表格,将其存储在缓存中,并且再也不会触摸它(以写入方式)。这就是为什么我对这个错误如此困惑。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-05
    • 2013-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-06
    相关资源
    最近更新 更多