如何仅更新已更改的字段?

时间:2009-02-23 16:50:57

标签: c# dataset

我有一个数据集,在其中我在数据表中创建一个新行并填入1或2个字段。他们每次都可能不一样。

当我执行dataset.update()时,所有字段似乎都被写回。我的数据库后端设置了未触发的默认值。

有没有办法让数据集只插入我手动修改的值,从而允许数据库“填写其他字段的默认值”?

我还需要让数据集生成insert语句。

3 个答案:

答案 0 :(得分:1)

您无法让设计人员生成insert语句(或让数据适配器在运行时生成它)并有选择地选择要设置的字段。

虽然DataSet确实有更改监视,但它在行级别而不是列级别。因此,您必须跟踪进行更改时设置的列。

如果要更改的列是一致的,那么我会手动在设计器中制作查询​​以仅插入这些值。

否则,您必须自行监控哪些列发生变化。如果数据库中的表没有允许空值的列,则可以允许DataSet中的列具有空值,并将其设置为默认值。然后,如果列没有空值,则表示它已被更改。

如果它允许空值,那么您必须在DataSet外部存储一个标志,指示是否为该列设置了值(您将在更改列时执行此操作)。

注意:当我说DataSet没有变更监控时,我的意思是对DataSet / DataTable上的GetChanges的调用不会告诉你哪个列发生了变化,只是哪些行发生了变化。对GetChanges的调用是DataAdapter将用于确定要发送到服务器的内容的内容,但它不知道要发送哪些列,因此它会全部发送。

答案 1 :(得分:0)

尝试使用类型化数据集或adapter.FillSchema方法。

更新1 虽然这会发送额外的值,但在插入时会有效地使用数据库默认值。

答案 2 :(得分:0)

您可以通过colling

手动设置默认值

Column.DefaultValue = defaultValue;

生成insert语句,您可以使用CommandBuilder类

new SqlCeCommandBuilder(dAdapter);