2011-02-18 72 views
0
DataSet ds = DAL.GetData(); 
DataSet dsInvitee = null; 

DataTable dt = ds.Tables[0].Copy(); 
IEnumerable<DataRow> q1 = dt.AsEnumerable().Skip(5).Take(10); 

dsInvitee = new DataSet(); 

DataTable dtNew = new DataTable(); 
dtNew.TableName = "DTInv"; 
dtNew = q1.CopyToDataTable<DataRow>(); 
dsInvitee.Tables.Add(dtNew.Copy()); 
dsInvitee.AcceptChanges(); 

dtNew = null; 
dtNew = new DataTable(); 
dtNew.TableName = "DTTags"; 
dtNew = ds.Tables[1].Copy(); 
dsInvitee.Tables.Add(dtNew.Copy()); 

我收到錯誤的最後一行是「的DataTable名爲‘表1’已經屬於此DataSet。」 ......請幫助。DataTable中添加到數據集例外

回答

2

你的問題是因爲行dtNew = q1.CopyToDataTable<DataRow>();,因爲CopyToDataTable擴展方法:

返回包含DataRow對象的副本的DataTable,給定一個輸入IEnumerable的對象,其中所述通用參數T的DataRow。

這意味着「DTInv」的表名被吹走的調用CopyToDataTable,dtNew後不再指同一DataTable。呼叫移動dtNew.TableName = "DTInv";CopyToDataTable

DataTable dtNew = new DataTable(); 
dtNew = q1.CopyToDataTable<DataRow>(); 
dtNew.TableName = "DTInv"; 
dsInvitee.Tables.Add(dtNew.Copy()); 
dsInvitee.AcceptChanges(); 
+0

此外,正如@Daniel Hilgarth所提到的,您的倒數第二行也是有錯誤的,原因幾乎相同。 – Rob 2011-02-18 10:56:47

1

我認爲問題是倒數第二行。您正在覆蓋實例dtNew。你到目前爲止所做的所有事情都會丟失,它會被分配一張來自原始數據集的表格,這就是你在最後一行中添加到數據集中的內容...

1

基於什麼丹尼爾上面說的,試換的

dtNew.TableName = "DTTags"; 

順序和

dtNew = ds.Tables[1].Copy(); 

線周圍。