Иногда я получаю эту ошибку на сервере:
Индекс был вне диапазона. Должен быть неотрицательным и меньше размера коллекции. Имя параметра: индекс -Трассировки стека- в System.Collections.BitArray.Get (индекс Int32) в System.Data.DataSet.MarkModifiedRows (TableChanges [] bitMatrix, DataRowState rowStates) в System.Data.DataSet.GetChanges (DataRowState rowStates) в System.Data.DataSet.GetChanges () в MapNetService.DataAccess.GPSDataProcessingProvider.Flu sh (имя строки)
У меня есть два сервера (производственный и тестовый), которые обрабатывают некоторые данные и в основном получают эту ошибку только на одном сервере
Функция очень проста
public void Flush(string name)
{
bool isSuccess = true;
try
{
GPSDataProcessingDS changedData = (GPSDataProcessingDS)gpsData.GetChanges();
gpsData.AcceptChanges();
RemoveExcessiveRows(name, gpsData.tblGPSReport);
RemoveExcessiveRows(name, gpsData.tblIOReport);
if (changedData != null
&& (changedData.tblGPSReport.Count > 0 || changedData.tblIOReport.Count > 0
|| changedData.tblLastGPSReadings.Count > 0))
{
isSuccess = SaveChanges(changedData);
}
else
{
Trace.WriteLine("No changes to flush.");
}
}
catch (Exception e)
{
Logger.Log(name, "Flushing exception:" + e.Message);
try
{
if (gpsData.HasErrors)
{
if (gpsData.tblGPSReport.GetErrors().Length > 0)
{
foreach (var error in gpsData.tblGPSReport.GetErrors())
{
Logger.Log(name, "Error:" + error.RowError);
}
}
if (gpsData.tblIOReport.GetErrors().Length > 0)
{
foreach (var error in gpsData.tblIOReport.GetErrors())
{
Logger.Log(name, "Error:" + error.RowError);
}
}
if (gpsData.tblLastGPSReadings.GetErrors().Length > 0)
{
foreach (var error in gpsData.tblLastGPSReadings.GetErrors())
{
Logger.Log(name, "Error:" + error.RowError);
}
}
}
}
catch
{
// ignored
}
gpsData.RejectChanges();
throw;
}
}
GetErrors () ничего не возвращает
Большое спасибо