2016-03-18 6 views
1

У меня есть форма, которая создает новый пользователь будет добавлен в моей базе данныхSQLite базы данных заблокирована ошибка в vb.net

До добавления пользователя, проверка, чтобы убедиться, что имя пользователя Безразлично» т уже существует

Dim sqlConn As New SQLiteConnection("Data Source=" & dbPath & ";Version=3;New=True;Compress=True;Password=mypassword") 
    sqlConn.Open() 
    Dim sqlCommand As New SQLiteCommand("SELECT * FROM usertable WHERE username ='" & txtUserName.Text & "'", sqlConn) 
    Dim sqlReader As SQLiteDataReader = sqlCommand.ExecuteReader() 
    If sqlReader.HasRows = False Then 
     sqlReader.Close() 
     sqlCommand.Dispose() 
     Dim sInsertSQL As String = "MY INSERT SQL" 
     sqlCommand = New SQLiteCommand(sInsertSQL, sqlConn) 
     sqlCommand.ExecuteNonQuery() 'I GET DATABASE IS LOCKED ERROR HERE' 
     sqlCommand.Dispose() 
     sqlConn.Close() 
    ELSE 
     'Username already exists message box 
    END IF 

Я проверил эту страницу, прежде чем задавать свой вопрос: Diagnosing cause of SQLite locking

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

+0

вы нашли решение? – fedeteka

ответ

0

Имея ту же проблему, я выяснил какой-то другой процесс до добавления новых значений, заблокированных db. Возможно, еще один код был запущен до фрагмента, который вы показываете.

Попробуйте это, отлично работает для меня:

Using SQLconnect As New SQLite.SQLiteConnection() 
Dim SQLcommand As SQLiteCommand 
SQLconnect.ConnectionString = sDBName 
If SQLconnect.State = ConnectionState.Open Then SQLconnect.Close() 

SQLconnect.Open() 
SQLcommand = SQLconnect.CreateCommand 
SQLcommand.CommandTimeout = 10 

SQLcommand.CommandText = "INSERT INTO news (id, M_IP, M_TYPE, M_MESSAGE, M_DONE) VALUES (1, '192.168.2.7' ,'STATUS', 'Hallo?' ,1)" 
'SQLcommand.CommandText = "UPDATE news Set name = 'Johnny' WHERE id = last_insert_rowid()" 
'SQLcommand.CommandText = "DELETE FROM news WHERE id = last_insert_rowid()" 

Try 

    Console.WriteLine("Erzeugung von n Zeilen: " & SQLcommand.ExecuteNonQuery(CommandBehavior.CloseConnection)) 

    SQLcommand.Dispose() 
    If SQLconnect.State = ConnectionState.Open Then SQLconnect.Close() 

Catch sql_ex As SQLiteException 
    Console.WriteLine(sql_ex.ToString) 
    Console.WriteLine(sql_ex.Message) 

End Try 

End Using 

С наилучшими пожеланиями

GN

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