我有两个线程,一个正在使用SqlDataAdapter
从SQL Server查询中提取结果集,另一个正在同时处理数据(不必删除)和数据集。
代码:
//Thread 1
DataSet ds = new DataSet();
using (SqlDataAdapter sd = new SqlDataAdapter(cmd, sourceConn))
{
sd.Fill(ds);
}
//Thread 2 -- Execute after Fill() starts
//I might be deleting or modifying some rows(use Delete() not RemoveAt()), but also might be just reading ds
ds.Tables[0].AcceptChanges();
执行结果有时显示ArgumentException
表示执行AcceptChanges()
时索引超出范围,或IndexOutOfRangeException
在ds.Tables[0].Rows[i].Delete()
运行时或仅读取一些ith
行时(当然,我限制了i<= ds.Tables[0].Rows.Count - 1
)。例外行计数发生在某个随机数上,但可能接近总行计数的80%以上(例如总计150k,发生在132k)。那么如果我没有执行任何删除过程,这里的窍门是什么?