Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Estou migrando um projeto, que utiliza access para o sqlite. Todo o projeto foi feito com conexao oledb. O problema que tenho agora com o sqllite, mas que funciona perfeitamente era com transações multiplas no banco de dados. Abaixo tem o codigo que estou usando, o banco retorna um erro de db locked ao executar o segundo comando no banco, e não estou conseguindo arrumar.
'metodo que realiza a alteração na base de dados
If (txt_nome.Text <> "" And txt_endereco.Text <> "") Then
Dim d As DialogResult = MsgBox("Confirma a atualização do cadastro da escola?", MsgBoxStyle.Question + MsgBoxStyle.YesNo, "Aviso!")
Dim trans As SQLite.SQLiteTransaction = Nothing
If d.ToString = "Yes" Then
Try
'Parametros de conexao
Dim v_obj_conn = New Conexao()
conn = v_obj_conn.Inicia_conexao
conn.Open()
'cria a transação
trans = conn.BeginTransaction(IsolationLevel.ReadCommitted)
'descobre o novo sequencial
'comando SQL
v_sql = "select max(seq)+1 as seq from cad_escola_versao where id_escola=@id_escola"
Dim sql_cod = New SQLite.SQLiteCommand(v_sql, conn, trans)
With sql_cod.Parameters
.Add(New SQLite.SQLiteParameter("@id_escola", txt_codigo.Text.Trim()))
End With
Dim dr As Sqlite.SQLiteDataReader = sql_cod.ExecuteReader
dr.Read()
Dim v_new_seq = dr("seq")
v_sql = Nothing
'grava o registro na tabela de versao para historico
Util.Grava_versao_cad_escola(conn, _
txt_codigo.Text.Trim(), _
v_new_seq, _
txt_nome.Text.Trim(), _
Util.Retirar_mascara(txt_cnpj.Text.Trim()), _
txt_endereco.Text.Trim(), _
txt_cidade.Text.Trim(), _
Util.Retirar_mascara(txt_cep.Text.Trim()), _
cmb_uf.Text.Trim(), _
Util.Retirar_mascara(txt_tel1.Text.Trim()), _
Util.Retirar_mascara(txt_tel2.Text.Trim()), _
Util.Retirar_mascara(txt_fax.Text.Trim()), _
txt_email.Text.Trim(), _
Frm_principal.lbl_usuario.Text.Trim, _
trans)
'realiza o update
v_sql = "update cad_escola set seq=@seq," & _
" razao_social=@razao_social," & _
" cnpj=@cnpj," & _
" endereco=@endereco," & _
" cidade=@cidade," & _
" cep=@cep," & _
" uf=@uf," & _
" tel_1=@tel_1," & _
" tel_2=@tel_2," & _
" fax=@fax," & _
" email=@email," & _
" usuario_criacao=@usuario_criacao," & _
" data_criacao=Now()" & _
" where id_escola=@id_escola"
Dim sql = New SQLite.SQLiteCommand(v_sql, conn, trans)
'monta os paremtros
With sql.Parameters
.Add(New SQLite.SQLiteParameter("@seq", v_new_seq))
.Add(New SQLite.SQLiteParameter("@razao_social", txt_nome.Text.Trim()))
.Add(New SQLite.SQLiteParameter("@cnpj", Util.Retirar_mascara(txt_cnpj.Text.Trim())))
.Add(New SQLite.SQLiteParameter("@endereco", txt_endereco.Text.Trim()))
.Add(New SQLite.SQLiteParameter("@cidade", txt_cidade.Text.Trim()))
.Add(New SQLite.SQLiteParameter("@cep", Util.Retirar_mascara(txt_cep.Text.Trim())))
.Add(New SQLite.SQLiteParameter("@uf", cmb_uf.Text.Trim()))
.Add(New SQLite.SQLiteParameter("@tel_1", Util.Retirar_mascara(txt_tel1.Text.Trim())))
.Add(New SQLite.SQLiteParameter("@tel_2", Util.Retirar_mascara(txt_tel2.Text.Trim())))
.Add(New SQLite.SQLiteParameter("@fax", Util.Retirar_mascara(txt_fax.Text.Trim())))
.Add(New SQLite.SQLiteParameter("@email", txt_email.Text.Trim()))
.Add(New SQLite.SQLiteParameter("@usuario_criacao", Frm_principal.lbl_usuario.Text.Trim))
.Add(New SQLite.SQLiteParameter("@id_escola", txt_codigo.Text))
End With
'Executa o comando SQL
sql.ExecuteNonQuery()
sql.Dispose()
trans.Commit()
MsgBox("Atualização de cadastro de escola efetuado com sucesso!", MsgBoxStyle.Information, "Aviso!")
Limpa_campos()
cmd_cadastrar.Enabled = True
cmd_atualizar.Enabled = False
Catch ex As Exception
MsgBox("Houve um erro durante a atualização do cadastro!" + Chr(13) + ex.Message, MsgBoxStyle.Critical, "Aviso!")
trans.Rollback()
Finally
If (conn.State = ConnectionState.Open) Then
conn.Close()
End If
End Try
End If
Else
MsgBox("Para atualizar o cadastro é obrigatório o preenchimento do nome e endereço!", MsgBoxStyle.Information, "Aviso!")
End IfCarregando comentários...