我有一个数据集,在其中我在数据表中创建一个新行并填入1或2个字段。他们每次都可能不一样。
当我执行dataset.update()时,所有字段似乎都被写回。我的数据库后端设置了未触发的默认值。
有没有办法让数据集只插入我手动修改的值,从而允许数据库“填写其他字段的默认值”?
我还需要让数据集生成insert语句。
答案 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);