Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何仅更新已更改的字段?_C#_Dataset - Fatal编程技术网

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

C# 如何仅更新已更改的字段?,c#,dataset,C#,Dataset,我有一个数据集,在其中我在datatable中创建了一个新行,并填入1或2字段。他们可能不是每次都一样 当我执行dataset.update()时,所有字段似乎都被写回。我的数据库后端设置了默认值,但未触发 有没有办法让数据集只插入我手动更改的值,从而允许数据库“填写其他字段的默认值” 我还需要让数据集生成insert语句 尝试使用类型化数据集或adapter.FillSchema方法 更新1虽然这将发送额外的值,但在执行插入时它将有效地使用数据库默认值。您将无法让设计器生成insert语句(或

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

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

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


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

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


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

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

虽然数据集具有更改监视功能,但它位于行级别,而不是列级别。因此,在进行更改时,必须跟踪设置了哪些列

如果要更改的列是一致的,那么我将在设计器中手工创建查询以仅插入这些值

否则,您将不得不自己监控哪些列的更改。如果数据库中的表没有允许空值的列,则可以允许数据集中的列具有空值,并将其设置为默认值。然后,如果列没有空值,您就知道它已被更改

如果它确实允许空值,那么您必须在数据集外部存储一个标志,指示是否为列设置了值(当列发生更改时,您可以这样做)


注意:当我说数据集没有变更监控时,我的意思是在DataSet/DataTable上调用GetChanges不会告诉您哪些列发生了变更,而只是哪些行发生了变更。DataAdapter将使用对GetChanges的调用来确定要发送到服务器的内容,但它不知道要发送哪些列,因此它会发送所有列。

您可以通过colling手动设置默认值

Column.DefaultValue=默认值

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


新的SqlCeCommandBuilder(dAdapter)

忘了加。我需要让数据集生成insert语句。