HELP - ERRO [Ô]NULL REFERENCEEXCEPTION WAS UNHANDL
Bom dia Pessoal,
Estou começando no vb.net e ocorre um erro em um sistema que estou tentando montar que não consigo resolver, poderiam me ajudar???
Não consigo entender por que em tempo de execução ocorre o erro [Ô]null ReferenceException was unhandled[Ô]
o erro ocorre na função [Ô]BancoDados.LimparParametros()[Ô] mas ela esta definida acho que corretamente na classe BancoDados.
segue trecho
Imports MySql.Data.MySqlClient
Public Class FRMFindEndereco
[ô]******************************************************************************************
[ô]************************ Declaração das Classes que Serão Utilizadas *********************
[ô]******************************************************************************************
Protected Rotinas As ClasseRotinasDiversas
Protected BancoDados As ClasseBancoDados
Property strValorRetorno As String
Private Sub FRMFindEndereco_Load(sender As Object, e As EventArgs) Handles MyBase.Load
BancoDados = New ClasseBancoDados([Ô]Server=localhost;Database=Athena;uid=root;pwd=xxxx;[Ô])
Rotinas = New ClasseRotinasDiversas
BancoDados.Abrir()
strValorRetorno = [Ô][Ô]
txtFindEndereco.Text = [Ô][Ô]
txtFindEndereco.Focus()
If cmbCampos.Text = [Ô]Endereço[Ô] Then
BancoDados.ComandoSQL = [Ô]SELECT * FROM endereco WHERE endereco LIKE @procura[Ô]
Else
If cmbCampos.Text = [Ô]CEP[Ô] Then
BancoDados.ComandoSQL = [Ô]SELECT * FROM endereco WHERE cep LIKE @procura[Ô]
Else
If cmbCampos.Text = [Ô]Bairro[Ô] Then
BancoDados.ComandoSQL = [Ô]SELECT * FROM endereco WHERE bairro LIKE @procura[Ô]
Else
If cmbCampos.Text = [Ô]Cidade[Ô] Then
BancoDados.ComandoSQL = [Ô]SELECT * FROM endereco WHERE cidade LIKE @procura[Ô]
End If
End If
End If
End If
BancoDados.CriaComandoSQL()
End Sub
Private Sub FRMFindEndereco_closed(sender As Object, e As EventArgs) Handles MyBase.Load
BancoDados.Fechar()
BancoDados = Nothing
Rotinas = Nothing
End Sub
Private Sub btnProcura_Click(sender As Object, e As EventArgs) Handles btnProcura.Click
BancoDados.LimparParametros()
BancoDados.AdicionaParametro([Ô]@procura[Ô], [Ô]%[Ô] + txtFindEndereco.Text + [Ô]%[Ô])
BancoDados.CriaDataAdapter()
BancoDados.DataAdapterComando()
Me.AthenaDataSet.endereco.Rows.Clear()
BancoDados.PreencherDataSet(Me.AthenaDataSet.endereco)
If (Me.AthenaDataSet.endereco.Rows.Count = 0) Then
MsgBox([Ô]Nenhum registro do cadastro de Endereços encontrado ![Ô])
End If
End Sub
Private Sub btnOK_Click(sender As Object, e As EventArgs) Handles btnOK.Click
strValorRetorno = grdEndereco.CurrentRow.Cells(0).Value.ToString
txtFindEndereco.Text = strValorRetorno
End Sub
End Class
Classe banco de dados tem este script
[ô]Importação da Biblioteca MySql
Imports MySql.Data.MySqlClient
Public Class ClasseBancoDados
[ô]***********************************************************************************
[ô]**************** MEMBROS DA CLASSE DE CONEXÃO BANCO DADOS **************
[ô]***********************************************************************************
Private ConexaoBD As MySqlConnection
Private Comandos As MySqlCommand
Private DataAdapter As MySqlDataAdapter
Private strComandoSQL As String
Private strOperacao As String
Private strChavePesquisa As String
[ô]***********************************************************************************
[ô]************************** MéTODOS DAS CLASSES *************************
[ô]***********************************************************************************
[ô] Contrutor da Conexão do banco de Dados
Public Sub New(ByVal strConexao As String)
ConexaoBD = New MySqlConnection(strConexao)
strOperacao = [Ô][Ô]
End Sub
[ô]Abertura do Banco de Dados
Public Sub Abrir()
Try
ConexaoBD.Open()
Catch excecao As MySqlException
MsgBox([Ô]Erro em tempo de Execução: [Ô] + excecao.Message)
End Try
End Sub
[ô]Fechamento do Banco de Dados
Public Sub Fechar()
ConexaoBD.Close()
End Sub
[ô]Ajustar o membro [Ô]strOperacao[Ô]
Public Property Operacao As String
Get
Return strOperacao
End Get
Set(ByVal value As String)
strOperacao = value
End Set
End Property
[ô]Ajustar o membro [Ô]strCcomandoSQL[Ô]
Public Property ComandoSQL As String
Get
Return strComandoSQL
End Get
Set(ByVal value As String)
strComandoSQL = value
End Set
End Property
[ô]Cria o objeto cmbComandoSQL
Public Sub CriaComandoSQL()
Comandos = New MySqlCommand(strComandoSQL, ConexaoBD)
End Sub
[ô]Apaga todos os parâmetros que existirem no objeto Comandos
Public Sub LimparParametros()
Comandos.Parameters.Clear()
End Sub
[ô]Adiciona o parâmetro ao Objeto Comandos
Public Sub AdicionaParametro(ByVal strNomeParametro As String, ByVal strValor As String)
Try
Comandos.Parameters.AddWithValue(strNomeParametro, strValor)
Catch excecao As MySqlException
MsgBox([Ô]Erro em tempo de execução: [Ô] + excecao.Message)
End Try
End Sub
[ô]Executa o Comando do banco de dados
Public Sub ExecutaSQL()
Try
Comandos.ExecuteNonQuery()
Catch excecao As MySqlException
MsgBox([Ô]Erro em tempo de execução:[Ô] + excecao.Message)
End Try
Comandos.Dispose()
End Sub
[ô]Retorna a conexão criada com o Banco de Dados
Public Function ConexaoAtiva()
Return ConexaoBD
End Function
[ô]Cria Objeto DataAdapter
Public Sub CriaDataAdapter()
DataAdapter = New MySqlDataAdapter
End Sub
[ô]Atribui à propriedade SelectComand de Datatable o conteudo de comandos
Public Sub DataAdapterComando()
DataAdapter.SelectCommand = Comandos
End Sub
[ô]Preenche uma tabela com os dados retornados
Public Sub PreencherDataSet(ByVal MeuDataSet As System.Data.DataTable)
DataAdapter.Fill(MeuDataSet)
End Sub
End Class
Estou começando no vb.net e ocorre um erro em um sistema que estou tentando montar que não consigo resolver, poderiam me ajudar???
Não consigo entender por que em tempo de execução ocorre o erro [Ô]null ReferenceException was unhandled[Ô]
o erro ocorre na função [Ô]BancoDados.LimparParametros()[Ô] mas ela esta definida acho que corretamente na classe BancoDados.
segue trecho
Imports MySql.Data.MySqlClient
Public Class FRMFindEndereco
[ô]******************************************************************************************
[ô]************************ Declaração das Classes que Serão Utilizadas *********************
[ô]******************************************************************************************
Protected Rotinas As ClasseRotinasDiversas
Protected BancoDados As ClasseBancoDados
Property strValorRetorno As String
Private Sub FRMFindEndereco_Load(sender As Object, e As EventArgs) Handles MyBase.Load
BancoDados = New ClasseBancoDados([Ô]Server=localhost;Database=Athena;uid=root;pwd=xxxx;[Ô])
Rotinas = New ClasseRotinasDiversas
BancoDados.Abrir()
strValorRetorno = [Ô][Ô]
txtFindEndereco.Text = [Ô][Ô]
txtFindEndereco.Focus()
If cmbCampos.Text = [Ô]Endereço[Ô] Then
BancoDados.ComandoSQL = [Ô]SELECT * FROM endereco WHERE endereco LIKE @procura[Ô]
Else
If cmbCampos.Text = [Ô]CEP[Ô] Then
BancoDados.ComandoSQL = [Ô]SELECT * FROM endereco WHERE cep LIKE @procura[Ô]
Else
If cmbCampos.Text = [Ô]Bairro[Ô] Then
BancoDados.ComandoSQL = [Ô]SELECT * FROM endereco WHERE bairro LIKE @procura[Ô]
Else
If cmbCampos.Text = [Ô]Cidade[Ô] Then
BancoDados.ComandoSQL = [Ô]SELECT * FROM endereco WHERE cidade LIKE @procura[Ô]
End If
End If
End If
End If
BancoDados.CriaComandoSQL()
End Sub
Private Sub FRMFindEndereco_closed(sender As Object, e As EventArgs) Handles MyBase.Load
BancoDados.Fechar()
BancoDados = Nothing
Rotinas = Nothing
End Sub
Private Sub btnProcura_Click(sender As Object, e As EventArgs) Handles btnProcura.Click
BancoDados.LimparParametros()
BancoDados.AdicionaParametro([Ô]@procura[Ô], [Ô]%[Ô] + txtFindEndereco.Text + [Ô]%[Ô])
BancoDados.CriaDataAdapter()
BancoDados.DataAdapterComando()
Me.AthenaDataSet.endereco.Rows.Clear()
BancoDados.PreencherDataSet(Me.AthenaDataSet.endereco)
If (Me.AthenaDataSet.endereco.Rows.Count = 0) Then
MsgBox([Ô]Nenhum registro do cadastro de Endereços encontrado ![Ô])
End If
End Sub
Private Sub btnOK_Click(sender As Object, e As EventArgs) Handles btnOK.Click
strValorRetorno = grdEndereco.CurrentRow.Cells(0).Value.ToString
txtFindEndereco.Text = strValorRetorno
End Sub
End Class
Classe banco de dados tem este script
[ô]Importação da Biblioteca MySql
Imports MySql.Data.MySqlClient
Public Class ClasseBancoDados
[ô]***********************************************************************************
[ô]**************** MEMBROS DA CLASSE DE CONEXÃO BANCO DADOS **************
[ô]***********************************************************************************
Private ConexaoBD As MySqlConnection
Private Comandos As MySqlCommand
Private DataAdapter As MySqlDataAdapter
Private strComandoSQL As String
Private strOperacao As String
Private strChavePesquisa As String
[ô]***********************************************************************************
[ô]************************** MéTODOS DAS CLASSES *************************
[ô]***********************************************************************************
[ô] Contrutor da Conexão do banco de Dados
Public Sub New(ByVal strConexao As String)
ConexaoBD = New MySqlConnection(strConexao)
strOperacao = [Ô][Ô]
End Sub
[ô]Abertura do Banco de Dados
Public Sub Abrir()
Try
ConexaoBD.Open()
Catch excecao As MySqlException
MsgBox([Ô]Erro em tempo de Execução: [Ô] + excecao.Message)
End Try
End Sub
[ô]Fechamento do Banco de Dados
Public Sub Fechar()
ConexaoBD.Close()
End Sub
[ô]Ajustar o membro [Ô]strOperacao[Ô]
Public Property Operacao As String
Get
Return strOperacao
End Get
Set(ByVal value As String)
strOperacao = value
End Set
End Property
[ô]Ajustar o membro [Ô]strCcomandoSQL[Ô]
Public Property ComandoSQL As String
Get
Return strComandoSQL
End Get
Set(ByVal value As String)
strComandoSQL = value
End Set
End Property
[ô]Cria o objeto cmbComandoSQL
Public Sub CriaComandoSQL()
Comandos = New MySqlCommand(strComandoSQL, ConexaoBD)
End Sub
[ô]Apaga todos os parâmetros que existirem no objeto Comandos
Public Sub LimparParametros()
Comandos.Parameters.Clear()
End Sub
[ô]Adiciona o parâmetro ao Objeto Comandos
Public Sub AdicionaParametro(ByVal strNomeParametro As String, ByVal strValor As String)
Try
Comandos.Parameters.AddWithValue(strNomeParametro, strValor)
Catch excecao As MySqlException
MsgBox([Ô]Erro em tempo de execução: [Ô] + excecao.Message)
End Try
End Sub
[ô]Executa o Comando do banco de dados
Public Sub ExecutaSQL()
Try
Comandos.ExecuteNonQuery()
Catch excecao As MySqlException
MsgBox([Ô]Erro em tempo de execução:[Ô] + excecao.Message)
End Try
Comandos.Dispose()
End Sub
[ô]Retorna a conexão criada com o Banco de Dados
Public Function ConexaoAtiva()
Return ConexaoBD
End Function
[ô]Cria Objeto DataAdapter
Public Sub CriaDataAdapter()
DataAdapter = New MySqlDataAdapter
End Sub
[ô]Atribui à propriedade SelectComand de Datatable o conteudo de comandos
Public Sub DataAdapterComando()
DataAdapter.SelectCommand = Comandos
End Sub
[ô]Preenche uma tabela com os dados retornados
Public Sub PreencherDataSet(ByVal MeuDataSet As System.Data.DataTable)
DataAdapter.Fill(MeuDataSet)
End Sub
End Class
No método LimparParametros verifica se a Variável Comandos está nula. Se não estiver, verifique se a variável Parameters está nula.
If Comandos IsNot Nothing Then
If Comandos.Parameters IsNot Nothing Then
Comandos.Parameters.Clear()
End If
End If
Citação::
No método LimparParametros verifica se a Variável Comandos está nula. Se não estiver, verifique se a variável Parameters está nula.
If Comandos IsNot Nothing Then
If Comandos.Parameters IsNot Nothing Then
Comandos.Parameters.Clear()
End If
End If
Obrigado Angelo,
Mas acabei descobrindo o problema, no evento closed fechava o BancoDados.
Removi estas linhas da funçao que fechava o formulario e com isto o problema foi resolvido.
Grato
Tópico encerrado , respostas não são mais permitidas