次のコードから、「この行は既にこのテーブルに属しています」というエラーが表示されます。
public static DataTable AddNewAllocations(string pCaseNo, ref DataTable pTable)
{
try
{
string sqlText = "SELECT UserID FROM tblUsers;";
aSqlQuery aQ = new aSqlQuery(sqlText, "table");
DataTable userTable = aQ.TableResult;
foreach (DataRow userRow in userTable.Rows)
{
int allocAlready = 0;
foreach (DataRow allocRow in pTable.Rows)
{
if (allocRow["FeeEarner"].ToString() == userRow["UserID"].ToString())
{
allocAlready = 1;
}
}
if (allocAlready == 0)
{
string strUser = userRow["UserID"].ToString();
decimal fees = cTimesheet.UserFees(strUser, pCaseNo);
int intCaseNo = Int32.Parse(pCaseNo);
if (fees > 0)
{
Object[] array = new object[8];
array[0] = 0;
array[1] = intCaseNo;
array[2] = DateTime.Today;
array[3] = strUser;
array[4] = fees;
array[5] = 0;
array[6] = fees;
array[7] = true;
pTable.Rows.Add(array);
}
}
}
return pTable;
}
catch (Exception eX)
{
throw new Exception("cAllocation: Error in NewAllocations()" + Environment.NewLine + eX.Message);
}
コードをステップ実行すると、2 回目に次の行にアクセスしたときにエラーがスローされることがわかります。
pTable.Rows.Add(array);
コードがループに入るたびに新しいオブジェクト配列を作成すると、このエラー メッセージが表示される理由がわかりません。これは、同じ行が複数回追加されていることを示唆しています。行が毎回新しいオブジェクト配列によって生成されるときに、コードが各ループを同じデータ行を追加していると見なすのはなぜですか?