Row already belongs to another table
November 1, 2009 by Nauman · Leave a Comment
When copying a row from one datatable to another you might get the error "this row already belongs to another table".
Typically you might write code like this:
string sConnString = ConfigurationManager.ConnectionStrings["NorthwindConn"].ConnectionString;DataSet ds = Microsoft.ApplicationBlocks.Data.SqlHelper.ExecuteDataset(sConnString,CommandType.Text,"select * from suppliers order by supplierid");int nRowCount = 0;DataTable dt = ds.Tables[0];DataTable dt2 = dt.Clone();dt2.Clear();foreach (DataRow row in dt.Rows){dt2.Rows.Add(row);nRowCount++;if (nRowCount == 10){DataRow rowNew = dt2.NewRow();rowNew["supplierid"] = -12345;dt2.Rows.Add(rowNew);nRowCount = 0;}}
The correct way is instead to "import" the row using ImportRow
string sConnString = ConfigurationManager.ConnectionStrings["NorthwindConn"].ConnectionString;DataSet ds = Microsoft.ApplicationBlocks.Data.SqlHelper.ExecuteDataset(sConnString,CommandType.Text,"select * from suppliers order by supplierid");int nRowCount = 0;DataTable dt = ds.Tables[0];DataTable dt2 = dt.Clone();dt2.Clear();foreach (DataRow row in dt.Rows){dt2.ImportRow(row);nRowCount++;if (nRowCount == 10){DataRow rowNew = dt2.NewRow();rowNew["supplierid"] = -12345;dt2.Rows.Add(rowNew);nRowCount = 0;}}