繁体   English   中英

如何用另一个DataRow更新DataTable中的ADO.NET DataRow?

[英]how to update a ADO.NET DataRow in DataTable with another DataRow?

我想做这个:

    public void UpdateDataRowsToDataTable(string tableName, List<DataRow> rows)
    {
        foreach (DataRow row in rows)
        {
            // this method does not exist!!
            _dataSet.Tables[tableName].Rows.Update(row);
        }
    }

我需要一种方法来查找行(也许通过主键)并将更新的行更新为DataTable中的行。

我知道的唯一可能性是使用Select(或Find),然后也许迭代所有列并为其赋予新值。 请告诉我这不是真的!

尽管问题不是很清楚,但是听起来您有一个表中的一组行,并且想要更新另一个数据表中的等效行。 在这种情况下,您可以只使用find方法并按照您的建议手动更新它们,或者将新行添加到另一个表中并进行合并(存在用于合并两个数据表的各种选择)。 但是,合并将在后台执行相同的操作(即通过主键查找并更新列)。

另一种方法是仅替换行并将其状态设置为已修改的datarow.SetModified()

或者,您可以删除旧的并添加新的...

另一个选择是使用ItemArray属性更新DataRow实例。 唯一的事情是您仍然必须选择适当的行。 另外,请注意,必须更改整个ItemArray而不是其元素,才能使修改反映在DataTable中

foreach (DataRow row in rows)
{
   // Select the row
   var rows = _dataSet.Tables[tableName].Select(string.Format("Table_ID = {0}", row["Table_ID"]));

   // Update the row
   if (0 < rows.Length)
       rows[0].ItemArray = (object[])row.ItemArray.Clone();
}

无论您选择更新DataRow的方式如何,都可以将整个内容放入扩展方法中。

如果您的数据表相同,可以使用装箱操作吗?

 DestDataset.DestDataTable newChildRecords = 
 (DestDataset.DestDataTable)_dataset.Tables[tableName].GetChanges(DataRowState.Added);

如果您正在使用dataAdapter ...

foreach (DataRow row in rows)
{
    Row.BeginEdit();        
    //Do your stuff        
    Row.EndEdit();
}
dataAdapter.Update(_dataSet, "yourTable");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM