如何操作数据集中的原始版本字段值
Posted
技术标签:
【中文标题】如何操作数据集中的原始版本字段值【英文标题】:How to manipulate the Original Version Field value in a DataSet 【发布时间】:2015-09-15 11:06:24 【问题描述】:如何操作将原始值写入 DataSet 行?
为什么我需要这样做?
我需要这样做,因为我们的新版本数据库已经改变了它的结构。但是,仍然有客户端发送具有旧结构的数据集。因此,我即时添加必填字段,并根据需要设置它们的值。然后,我应该能够像往常一样使用 DataAdapter 更新数据库。
为了使DELETE操作生效,我应该可以在DataSet中设置一个主键字段的原始版本,因为DataAdapter使用原始版本来构造删除命令的参数值。
但是,我还没有找到任何方法来做到这一点。以下代码甚至无法编译:
ds.Tables["Table"].Rows[0]["NewField", DataRowVersion.Original]=23;
有什么想法吗?
【问题讨论】:
【参考方案1】:更改现有数据库表架构重命名/复制表并进行与新表兼容的应用程序更改,并在现场没有流量更新新表时使用原始表插入数据和主键进行后台操作。
再次执行此操作后原始数据进入更改表使代码生效并将更改表重命名为原始表。我希望这确实有效。
【讨论】:
不,我不打算在数据库中保留旧表。我只是应该将提交的数据集动态更改为内存中的新结构...【参考方案2】:调用 DataTable.AcceptChanges() 方法,这会使当前/提议的版本变为原始版本。希望它对你有用。
1.更新:我能够通过以下步骤得到它
创建与原始模式相同的新数据表(例如 dt2) 数据表(比如 dt1)+ 新标识列 用原始数据填充 dt2 来自 dt1 的值,还根据需要填充新列值 调用接受 dt2 上的更改(新数据表) 现在将 dt1 当前值复制到 dt2所以你既有当前值也有原始值,包括新列的原始值。
我做了一小段代码,如果需要可以分享,但逻辑很简单。
【讨论】:
不幸的是,调用 AcceptChanges 意味着我将丢失所有待处理的更新。这使得数据集毫无用处,因为客户端将其提交给服务器的原因是它包含应该写入数据库的更新。 知道了,没有看到任何方法来设置特定列的原始值或在列上调用 AcceptChanges().... 将尝试使用 datarow 事件并添加是否可信以上是关于如何操作数据集中的原始版本字段值的主要内容,如果未能解决你的问题,请参考以下文章
R语言vtreat包自动处理dataframe的缺失值并生成对应的数据列_isbad来指示数据的原始缺失情况查看特定字段缺失的那些数据行查看数据集中多个字段的均值