Ir ao conteúdo
  • Cadastre-se

.NET - Problema com acesso a Banco de Dados


r.fagioli

Posts recomendados

Fala galera!

Estou criando uma aplicação para uso próprio, algo bem simples e enrosquei em uma parte.

Public Shared Sub CreateDataBase()
Dim AdoxCatalog As New ADOX.Catalog

Dim oleDbCon As New OleDbConnection

Dim oleDbCmd As New OleDbCommand

Try
AdoxCatalog.Create("Provider = Microsoft.Jet.OleDB.4.0; Data Source = " + Application.StartupPath + "\" + strDbName + "; Jet OLEDB:Database Password = " + strDbPassword)

oleDbCon = New OleDbConnection(strConnection)

oleDbCon.Open()

oleDbCmd = New OleDbCommand("CREATE TABLE cartoes_nacionais (" + "serie_nome VARCHAR(255), " + "serie_tipo VARCHAR(50), " + "serie_quant SMALLINT, " + "cartao_nome VARCHAR(255), " + "cartao_abreviacao VARCHAR(3), " + "cartao_num_inicial SMALLINT, " + "cartao_num_final SMALLINT, " + "cartao_tiragem SMALLINT, " + "cartao_tiragem_tipo VARCHAR(50), " + "cartao_emis_mes VARCHAR(50), " + "cartao_emis_ano SMALLINT, " + "cartao_emis_estado VARCHAR(50), " + "cartao_emis_num SMALLINT, " + "cartao_credito SMALLINT, " + "cartao_fabricante VARCHAR(60), " + "cartao_operadora VARCHAR(60), " + "cartao_conservacao VARCHAR(60), " + "cartao_foto_frente LONGBINARY, " + "cartao_foto_verso LONGBINARY, " + "observacoes VARCHAR(255))", oleDbCon)

oleDbCmd.ExecuteNonQuery()
Catch ex As Exception
MessageBox.Show(ex.Message, strAppName, MessageBoxButtons.OK, MessageBoxIcon.Error)
Finally
AdoxCatalog = Nothing

If oleDbCon.State <> ConnectionState.Closed Then oleDbCon.Close()

oleDbCon = Nothing

oleDbCmd = Nothing
End Try
End Sub

Public Shared Sub CompactDataBase()
Dim JroJetEngine As New JRO.JetEngine

Try
JroJetEngine.CompactDatabase(strConnection, "Provider = Microsoft.Jet.OleDB.4.0; Data Source = " + Application.StartupPath + "\temp.mdb; OLEDB:Database Password = " + strDbPassword)
Catch ex As Exception
MessageBox.Show(ex.Message, strAppName, MessageBoxButtons.OK, MessageBoxIcon.Error)
Finally
JroJetEngine = Nothing
End Try
End Sub

O primeiro método cria um arquivo de banco de dados Access via AdoX e em seguida adiciona a tabela via Ado.NET. Até aí tudo ok. Depois eu resolvi criar outro método que compacta o banco de dados e é aí que está o problema. A exceção ocorre quando tento compactar com o método CompactDatabase. A mensagem da exceção é essa: Você tentou abrir um banco de dados que já fora aberto em modo exclusivo pelo usuário 'Admin' na máquina tal. Tente novamente quando o banco de dados estiver disponível.

Onde eu estou errando? A conexão não é fechada no Finally do método CreateDatabase ou falta algo para fechá-la?

Obrigado.

Link para o comentário
Compartilhar em outros sites

Então EduardoS, tentei como você disse porém sem sucesso. Parece que o método Catalog.Create cria o arquivo e o mantém aberto. Não tinha observado isso. (_( Mudei o bloco Finally do método CreateDataBase a aí deu certo:

Finally
AdoxCatalog.ActiveConnection = Nothing

If oleDbCon.State <> ConnectionState.Closed Then oleDbCon.Close()

System.Runtime.InteropServices.Marshal.ReleaseComObject(AdoxCatalog)

AdoxCatalog = Nothing

oleDbCmd = Nothing

oleDbCon = Nothing

GC.Collect()
End Try

Problema resolvido. Podem fechar o tópico.

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!