2013-09-04 10 views
0

Я, кажется, получаю случайные сообщения об ошибках при попытке прочитать запросы из базы данных SQLite, хранящейся на сетевом диске. На моей машине разработки я редко получаю сообщение об ошибке, но пользователи сообщают о таких случайных ошибках, как:Ошибки с SQLite и VB.net при чтении базы данных

  • Невозможно открыть базу данных. Файл зашифрован или не является базой данных
  • Образ диска диска поврежден
  • Или он просто не возвращает никаких данных.

Мой код выглядит такой:

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, но он просто возвращает мне сообщение об ошибке (выше) в журналах.

Любая помощь была бы принята с благодарностью. Спасибо

+0

Я добавил записи журнала после каждой операции, которая происходит в течение этого подпрограммы, так что я могу попытаться определить, где программное обеспечение падение. Мне удалось найти, что всякий раз, когда возникает эта проблема, мои файлы журналов останавливаются после очистки набора данных, а затем заполняют его: Итак, после dasSpice.Clear() и до da.Fill (dasSpice, «Calls») – Riples

+0

Попробуйте сохранить тип исключения, сообщение исключения и трассировка стека. Они могут помочь вам. Думаю, у вас может быть исключение из-за тайм-аута. –

ответ

2

После многих часов поиска и устранения неисправностей я обнаружил, что SQLite не очень хорошо работает с удаленными подключениями. Это не только вызывало ошибки в моем приложении, но и бросало ошибки в родительском приложении.

Моей альтернативой было написать приложение для запроса базы данных, которая выполнялась локально на машине SQLite. Это фиксировало все мои проблемы.

Для тех, кто заинтересован ...

Смежные вопросы