Периодическое исключение «Превышен системный ресурс» для подключения OleDB к файлу данных Microsoft Access

м переживает, казалось бы, случайныйПревышен системный ресурс исключение при запуске моего кода. Идея моей программы заключается в том, что стороннее программное обеспечение постоянно записывает данные в файл базы данных Microsoft Access (.res) -примерно каждые 30 секунд мой код читает данные из этого файла, выполняет некоторые операции над ним и записывает результаты в нашу базу данных. К сожалению, я не могу изменить способ, которым стороннее программное обеспечение записывает данные в файлы, я застрял в файлах данных Access.

Эта ошибка возникает как в производственной системе, где запущена программа WinForms, установленная посредством публикации Click-Once, так и в программе тестирования консоли в моей системе разработки. Я получаю исключение даже при выполнении запроса, который возвращает одно целое число, и никакая другая программа или поток не касается файла, который находится на моем локальном диске.

Информация об исключении:

System.Data.OleDb.OleDbException (0x80004005): System resource exceeded.
   at System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(OleDbHResult hr)
   at System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult)
   at System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult)
   at System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior, Object& executeResult)
   at System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method)
   at System.Data.OleDb.OleDbCommand.ExecuteScalar()
...

Пример кода, который воспроизводит проблему:

string connectionString = @"Provider = Microsoft.ACE.OLEDB.12.0; Data Source = C:\datafile.res";
string commandText = "SELECT MIN(Data_Point) FROM Channel_Normal_Table WHERE Test_ID = 1";

int connectionCounter = 0;            
object result;

while (true)
{                
    using (OleDbConnection connection = new OleDbConnection(connectionString))
    {
        connection.Open();
        connectionCounter++;

        using (OleDbCommand command = new OleDbCommand(commandText, connection))
        {
            result = command.ExecuteScalar();
        }

        connection.Close();
    }
}

К сожалению, исключение не является детерминированным - я видел, что оно происходит где-то от выполнения 4-й команды до 6149-й в том же файле с тем же кодом. Это всегда происходит в строке command.ExecuteScalar (). Если в этом коде есть утечка ресурсов, помогите мне ее найти.

Я попытался установить исправление, найденное наhttp://support.microsoft.com/kb/2760394 (и сделал необходимые изменения в реестре), но это не решает проблему. Любые предложения будут оценены и настойчиво преследуются.

Это работает на Windows 7, C # 4.0 (консоль и WinForms), 4 ГБ ОЗУ

Ответы на вопрос(1)

Ваш ответ на вопрос