I have searched Google high and low and haven't found anything that
works. Here's my problem, hopefully someone will be able to help!
I'm using 1.1 Framework, and ODP.NET 9.5.0.7 on a Windows 2003 Server.
I have a cached DataSet that I fill using an OracleDataAdapter. Changes
are made to that dataset in memory and as rows are changed, they are
updated back to the database using OracleDataAdapter.Update(DataRow).
Every few minutes, I refresh the cached queue from the database by
calling a subsequent OracleDataAdapter.Fill(). Most of the time, this
works fine. Occasionally - and I have not been able to pinpoint the
conditions when it happens - the fill command will hang.
It gives me an Index out of Range error at:
at System.Collections.ArrayList.get_Item(Int32 index)
at System.Data.DataTable.RecordStateChanged(Int32 record1,
DataViewRowState oldState1, DataViewRowState newState1, Int32 record2,
DataViewRowState oldState2, DataViewRowState newState2)
at System.Data.DataTable.SetOldRecord(DataRow row, Int32
proposedRecord)
at System.Data.DataTable.CommitRow(DataRow row)
at System.Data.DataTable.LoadDataRow(Object[] values, Boolean
fAcceptChanges)
at System.Data.Common.SchemaMapping.LoadDataRow(Boole an
clearDataValues, Boolean acceptChanges)
at System.Data.Common.DbDataAdapter.FillLoadDataRow(S chemaMapping
mapping)
The code that I am using to refresh the cached dataset is:
public static void Execute(){
try{
Log.Add("INFO", "Data Sync Start");
OracleDataAdapter dbAdapter =
(OracleDataAdapter)CachedQueue.getQueueAdapter();
dbAdapter.ContinueUpdateOnError = true;
DataSet ds = CachedQueue.getQueue();
dbAdapter.FillError += new
FillErrorEventHandler(dbAdapter_FillError);
Log.Add("DEBUG", "Filling Cached Queue");
int i = dbAdapter.Fill(ds);
Log.Add("INFO", i + " items refreshed in cache");
Log.Add("INFO", "Data Sync Finish");
} catch (System.Exception e){
Log.Add("ERROR", e.StackTrace);
}
}
This is running in a Background thread. The thread itself seems to die
completely. Restarting the Application pool restarts the process and
it continues on its way until this happens again.
The dataset itself is a select from one table, with one additional
computed column added.
I would be very grateful if someone could help point me in the right
direction.