【问题标题】:Errors With SQLite and VB.net when reading database读取数据库时 SQLite 和 VB.net 的错误
【发布时间】:2014-04-23 20:51:16
【问题描述】:

尝试从存储在网络驱动器上的 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 事件处理程序,但它只是在日志中返回错误消息(如上)。

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

【问题讨论】:

  • 我在该子例程中发生的每个操作之后都添加了日志条目,因此我可以尝试确定软件在哪里出错。我设法发现每次发生此问题时,我的日志文件在清除数据集然后填充它之后停止:所以在 dasSpice.Clear() 和 da.Fill(dasSpice, "Calls") 之前
  • 尝试保存异常类型、异常消息和堆栈跟踪。他们可能会帮助你。我猜你可能会因为超时而出现异常。

标签: vb.net sqlite


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-20
    • 1970-01-01
    • 2021-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多