0

尝试从存储在网络驱动器上的 SQLite DB 读取查询时,我似乎收到了随机错误消息。在我的开发机器上,我很少遇到错误,但用户会报告随机错误,例如:

  • 无法打开数据库。文件已加密或不是数据库
  • 数据库磁盘映像格式错误
  • 或者它只是不返回任何数据。

我的代码如下所示:

Private Sub LoadStoreCalls()
    Dim tmpID As String
    Dim QryString As String

Dim SQLconnect As New SQLite.SQLiteConnection()

SQLconnect.ConnectionString = "Data Source=" & SpiceWorksPath & ";New=False;Compress=True;Read Only=True;"

Try
    'Open a connection to the database
    SQLconnect.Open()

    'Get StoreCode
    tmpID = Mid(StoreCode, 2) & "-" & StoreName

    QryString = "SELECT id, summary, status, c_location, c_store_device FROM tickets WHERE status = 'open' AND c_location = '" & tmpID & "'"
    Dim ExQry As New SQLiteCommand(QryString, SQLconnect)
    ExQry.CommandType = CommandType.Text

    Dim da As New SQLiteDataAdapter(ExQry)
    dasSpice.Clear()
    da.Fill(dasSpice, "Calls")

    SQLconnect.Close()

Catch ex As Exception
    If SQLconnect.State = ConnectionState.Open Then SQLconnect.Close()
    MsgBox(ex.Message)

End Try
End Sub

问题是我的应用程序依赖于返回的这些数据来填充 datagridview 控件的其他条目,并且因为我无法使用调试在我的开发机器上复制这个错误,所以我找不到故障发生的位置。

如果用户遇到这些错误之一,他们通常会继续尝试运行查询,最终它会起作用。或者他们只是退出我的应用程序并返回,然后它似乎工作了一段时间。这些错误是随机的,并不总是来自运行相同的查询。

我假设这是由于与共享驱动器上的 SQLite DB 交谈的问题,但我找不到任何有关设置超时的信息。我也无法弄清楚如何“捕捉”错误,因为我自己无法复制它。我尝试将日志记录详细信息添加到 Catch 事件处理程序,但它只是在日志中返回错误消息(如上)。

任何帮助将不胜感激。谢谢

4

1 回答 1

2

经过数小时的故障排除和研究,我发现 SQLite 不能很好地处理远程连接。它不仅在我的应用程序中导致错误,还在父应用程序中引发错误。

我的替代方法是编写一个应用程序来查询在 SQLite 机器上本地运行的数据库。这解决了我所有的问题。

对于任何有兴趣的人...

于 2014-04-23T12:51:16.627 回答