DataSet.GetChanges () возвращает исключение: индекс находится вне диапазона. Должен быть неотрицательным и меньше размера коллекции - PullRequest
0 голосов
/ 08 марта 2020

Иногда я получаю эту ошибку на сервере:

Индекс был вне диапазона. Должен быть неотрицательным и меньше размера коллекции. Имя параметра: индекс -Трассировки стека- в 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 () ничего не возвращает

Большое спасибо

...