我正在为我的公司开发一个桌面应用程序(实际上它只是一个原型),用于为生产部门提供简单的服务(工具和流程说明、存在记录、产品可追溯性等)。我正在使用 VB.net 和 wpf;一些 MS Access 数据库是后端。它使用 Access 数据库引擎 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 [" & tblName & "] SET [" & UpdateColumn & "]=@UpdateColumn WHERE [" & SearchInColumn & "] = " & DQ & SearchBy & DQ
Else
CommandString = "UPDATE [" & tblName & "] SET [" & UpdateColumn & "]=@UpdateColumn WHERE [" & SearchInColumn & "] = " & 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 & NewLine & ex.Message & NewLine & "Err. Number " & Err.Number, "Database Error", MessageBoxButton.OK, MessageBoxImage.Error)
UpdateDatabaseRecord = Err.Number
End Try
End Function
有时应用程序在主线程中使用这个函数;有时它会从计划任务中运行它(由 forms.timer 每两分钟计时)。这些任务显然不在主线程中,但代码已经成功使用了几个月,计算机通过 LAN 电缆直接连接到公司网络。最近,我在通过 wifi 连接到公司网络的笔记本电脑上尝试了我的应用程序,但我遇到了一个导致我的应用程序崩溃的异常。我在那台笔记本电脑上安装了 VS 来调试代码,我发现在“ CommandUpdate.ExecuteNonQuery ”行上引发了 AccessViolationException“。我试图用谷歌搜索它,但似乎不应从托管代码中引发此异常。该错误仅在通过 wifi 连接的笔记本电脑时发生。此外,另一个函数从数据库中读取数据:有时我会遇到同样的错误, 在打开连接的行 (connection.open)。
我应该检查什么?
提前致谢。
ps "ConnectionSelector" 是一个简单的函数,它根据数据库编号返回适当的 ConnectionString。
编辑 1 - 使用普通无线路由器直接从实际有线网络插入 LAN 电缆创建 WiFi 网络。IP 地址是自动分配的,并且连接正常,因为该应用程序能够从数据库中获取数据。