情况就是这样。我有一个选择查询,它获取了我想要插入到新DataTable中的DataRows数组。
但是当尝试添加Row时,我收到以下错误:
" Row已经属于另一个表"。
所以我尝试在循环中创建并初始化一个新的DataRow(for和foreach循环),然后在初始化DataRow时抛出错误:
"由于其保护级别无法访问"
任何想法?感觉就像我错过了一些愚蠢的东西。
第一个错误的我的代码:
var DRCurrentAuspragung = _DTAuspragung.Select(@"MerkmalID = "+Convert.ToString(MerkmalID));
_DTCurrentAuspragung = new DataTable();
for (int i = 0; i < DRCurrentAuspragung.Length;i++ )
{
DataRow RowAdd = DRCurrentAuspragung[i];
_DTCurrentAuspragung.Rows.Add(RowAdd);
}
第二个错误:
var DRCurrentAuspragung = _DTAuspragung.Select(@"MerkmalID = "+Convert.ToString(MerkmalID));
_DTCurrentAuspragung = new DataTable();
foreach (DataRow dr in DRCurrentAuspragung)
{
DataRow RowAdd = new DataRow();
RowAdd = dr;
_DTCurrentAuspragung.Rows.Add(RowAdd);
}
提前致谢。
答案 0 :(得分:0)
此异常的原因是一个DataRow
对象不能属于多个表。一种解决方案是在ImportRow
方法的帮助下创建此行的副本:
_DTCurrentAuspragung.ImportRow(RowAdd);
选择行后不要忘记使用Clone()
,因为这两个表必须具有相同的结构:
DataTable _DTCurrentAuspragung = _DTAuspragung.Clone();
因此,结果是:
var DRCurrentAuspragung = _DTAuspragung.Select(@"MerkmalID = " + Convert.ToString(MerkmalID));
_DTCurrentAuspragung = _DTAuspragung.Clone();
for (int i = 0; i < DRCurrentAuspragung.Length; i++ )
{
DataRow RowAdd = DRCurrentAuspragung[i];
_DTCurrentAuspragung.ImportRow(RowAdd);
}
答案 1 :(得分:0)
您可能想要使用ImportRow()方法。请记住,您要导入行的表必须与您要导入的行所属的表具有相同的结构(列名和类型)