Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.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中的基础表#_C#_Database - Fatal编程技术网

C# 更新已更改行集合中的字段不会更新C中的基础表#

C# 更新已更改行集合中的字段不会更新C中的基础表#,c#,database,C#,Database,我有一个带有表的数据集,基本上我调用 DataTable aTable = dataSet.Tables["DocData"].GetChanges(); foreach (DataRow aRow in aTable.Rows) { switch (aRow.RowState) { case DataRowState.Unchanged: break; case DataRowState.Added:

我有一个带有表的数据集,基本上我调用

DataTable aTable = dataSet.Tables["DocData"].GetChanges();
foreach (DataRow aRow in aTable.Rows)
{
    switch (aRow.RowState)
    {
        case DataRowState.Unchanged:
            break;
        case DataRowState.Added:
           aRow["ID"] = getNewID();
           //...updates database here
           aRow.AcceptChanges();
           break;
     }
}

现在,更改行上对
ID
的更改不会在更改行来自的基础表对象中更新。。。我怎样才能做到这一点?保存新行时,我需要添加
id

调用
GetChanges
在您的行上循环以检索每个更改的行并生成该行的副本。因此,更新将更改副本而不是原始行

似乎无法避免在某个地方使用循环来检索添加的行,因此,多亏了Linq,您可以尝试使用这个更简单的代码

foreach (DataRow aRow in aTable.AsEnumerable()
                               .Where(x => x.RowState == DataRowState.Added)
{
     aRow["ID"] = getNewID();
}

如果我检查表中的行,那么我可以编辑那些由GetChanges返回的更改行。但是迭代表中的所有行效率很低。我意识到接受更改不会更改我的数据库我正在这样做,但我想从GetChanges返回的changed rows数组中更改dataTable对象行,并将它们反映在dataTable对象中。因此,它反映了我刚刚从更改的行写入数据库的内容。