Система.AccessViolationException возникает с базами данных MS Access только через WiFi-соединение

#vb.net #ms-access #exception #aceoledb

#vb.net #ms-access #исключение #aceoledb

Вопрос:

Я разрабатываю настольное приложение для своей компании (на самом деле это всего лишь прототип) для предоставления простых услуг производственному отделу (инструкции по инструментам и процессам, записи присутствия, отслеживание продукта и т.д.). Я использую VB.net и wpf; некоторые базы данных MS Access являются серверной частью. Он использует Access Database Engine 2016.

У меня есть простая функция, используемая для обновления записей базы данных, вот она:

   Public Function UpdateDatabaseRecord(DatabaseNumber As Integer, tblName As String, SearchInColumn As String, SearchBy As String, UpdateColumn As String, UpdateTo As String) As Integer
    Try
        Using ServerConnection As New OleDbConnection(ConnectionSelector(DatabaseNumber))
            Dim CommandString As String
            If SearchInColumn <> "ID" Then
                CommandString = "UPDATE [" amp; tblName amp; "] SET [" amp; UpdateColumn amp; "]=@UpdateColumn WHERE [" amp; SearchInColumn amp; "] = " amp; DQ amp; SearchBy amp; DQ
            Else
                CommandString = "UPDATE [" amp; tblName amp; "] SET [" amp; UpdateColumn amp; "]=@UpdateColumn WHERE [" amp; SearchInColumn amp; "] = " amp; SearchBy
            End If
            Dim CommandUpdate As New OleDbCommand(CommandString, ServerConnection) With {.CommandTimeout = 10000}
            With CommandUpdate.Parameters
                .AddWithValue("@UpdateColumn", UpdateTo)
            End With
            ServerConnection.Open()
            CommandUpdate.ExecuteNonQuery()
            ServerConnection.Close()
        End Using
        UpdateDatabaseRecord = 0
        SetCentralTimeStamp(DatabaseNumber, tblName)
    Catch ex As Exception
        Msg(Reflection.MethodBase.GetCurrentMethod.Name amp; NewLine amp; ex.Message amp; NewLine amp; "Err. Number " amp; Err.Number, "Database Error", MessageBoxButton.OK, MessageBoxImage.Error)
        UpdateDatabaseRecord = Err.Number
    End Try
End Function
  

Иногда приложение использует эту функцию в главном потоке; иногда оно запускает ее из запланированной задачи (с тактовой частотой forms.timer каждые две минуты). Очевидно, что эти задачи не входят в основной поток, но код успешно использовался в течение нескольких месяцев с компьютерами, напрямую подключенными к сети компании через кабель LAN. Недавно я попробовал свое приложение на ноутбуке, подключенном через Wi-Fi к сети компании, и я получаю исключение, которое приводит к сбою моего приложения. Я установил VS на этот ноутбук для отладки кода и обнаружил, что в строке «CommandUpdate возникает AccessViolationException.ExecuteNonQuery«.
Я попытался погуглить, но, похоже, это исключение не должно вызываться из управляемого кода.
Ошибка возникает только с ноутбуком, подключенным через WiFi.
Кроме того, другая функция считывает данные из баз данных: иногда я получаю ту же ошибку в ней, в строке, в которой открывается соединение (connection.open).

Что я должен проверить?

Заранее спасибо.

ps «ConnectionSelector» — это простая функция, которая возвращает соответствующую строку подключения на основе номера базы данных.

РЕДАКТИРОВАТЬ 1 — Сеть Wi-Fi создается при непосредственном подключении кабеля локальной сети к реальной проводной сети с использованием общего беспроводного маршрутизатора. IP-адреса назначаются автоматически, и соединение работает, поскольку приложение может получать данные из баз данных.

Комментарии:

1. Похоже, для меня это проблема сетевой инфраструктуры, если она работает безупречно при жестком подключении. Действительно ли Wi-Fi подключен к той же сети, что и кабельные соединения? Совпадают ли диапазоны IP-адресов?

2. Сеть Wi-Fi создается при непосредственном подключении кабеля локальной сети к реальной проводной сети с использованием общего беспроводного маршрутизатора. IP-адреса назначаются автоматически. Есть ли какие-либо настройки, которые я должен проверить с беспроводного маршрутизатора? Может ли это быть проблемой объединения?

3. Ваше соединение в конечном итоге разрешено для открытия ФАЙЛА. По сути, это НЕ подключение к сокетам tc / ip, а сохранение файла открытым по сети. Если в этом соединении есть один крошечный сбой? затем дескриптор файла теряется и, следовательно, so является надежным подключением к базе данных. Это может привести к повреждениям во время обновлений. Это очень похоже на сбой транспортера Star trek, и если поток данных прерывается или повреждается во время транспортировки, то молекулы человека не могут быть повторно собраны на другой стороне, или в этом случае состояние вашего файла и буферы теряются. Sql express для Wi-Fi — хорошая идея.

Ответ №1:

Я решил проблему сам и размещаю здесь найденное мной решение: я надеюсь, что это поможет кому-то в будущем.

Я решил просто включить все службы OLEDB для подключения к базе данных. Похоже, что объединение пулов соединений действительно помогает стабильности и производительности, особенно при использовании сети Wi-Fi, как я вынужден делать. Если вы хотите, найдите в Google «Службы OLEDB» и найдите, чтобы включить их все.