none
Erro ExecuteReader RRS feed

  • Pergunta

  • Ao debugar a sub a seguir no VB 2010 aparece erro no ExecuteReader. Poderiam me dizer por quê?
     Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
            Dim con As New OleDbConnection
            con.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source='C:\2011\2011 Informática\Visual basic 2010\CartaoSantander\CartaoSantander\codigo.accdb'"
            con.Open()
            Dim comando As New OleDbCommand
            comando.CommandText = "SELECT codigos FROM tb_dados WHERE numeros = '" & TextBox1.Text & "'"
            comando.ExecuteReader()
            con.Close()
        End Sub
    End Class
    domingo, 4 de dezembro de 2011 02:40

Respostas

  • Fiz o teste com este código e funcionou:


    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    Dim con As New OleDbConnection
    con.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source='C:\Users\FernandoF\Desktop\codigo.accdb'"
    con.Open()
    Dim comando As New OleDbCommand
    comando.CommandText = "SELECT codigos FROM tb_dados WHERE numeros = " & TextBox1.Text & ""
    comando.CommandType = CommandType.Text
    comando.Connection = con
    Dim leitor As OleDbDataReader
    leitor = comando.ExecuteReader()
    leitor.Read()
    Label1.Text = leitor("codigos")
    con.Close()
    End Sub


    A tabela que criei possuia a seguinte estrutura:
    codigos - AutoNumber (PK)
    numeros - Number

    ps.: Repare que só mudei a sua query SQL

    []s!
    Fernando Henrique Inocêncio Borba Ferreira
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.wordpress.com/
    Twitter: @ferhenrique
    quarta-feira, 7 de dezembro de 2011 10:50
    Moderador

Todas as Respostas

  • Olá Anderson,

    Pelo que me parece vc deixou de informar ao OleDbCommand qual objeto de conexão que ele deve utilizar.

    Faça assim:

            Dim con As New OleDbConnection
            con.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source='C:\2011\2011 Informática\Visual basic 2010\CartaoSantander\CartaoSantander\codigo.accdb'"
    
            Dim comando As New OleDbCommand
            ' Faltava a linha abaixo
            comando.Connection = con
            comando.CommandText = "SELECT codigos FROM tb_dados WHERE numeros = '" & TextBox1.Text & "'"
            con.Open()
            comando.ExecuteReader()
            con.Close()
    


    Se não for isso, poste a mensagem de erro.

    []s!


    Fernando Henrique Inocêncio Borba Ferreira
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.wordpress.com/
    Twitter: @ferhenrique
    domingo, 4 de dezembro de 2011 12:42
    Moderador
  • o teu executereader tem de ser igual alguma coisa:

    Dim ler_excuteReader As OleDBDatareader = comando.ExecuteReader()


    One word frees us of all the weight and pain of life: that word is love.
    domingo, 4 de dezembro de 2011 18:06
  • Acrescentei a linha e continua dando o mesmo erro.
    domingo, 4 de dezembro de 2011 18:36
  • Sou iniciante em programação e não entendi a sua resposta.

    A sub completa está assim:

     

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click

            Dim con As New OleDbConnection

            con.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source='C:\2011\2011 Informática\Visual basic 2010\CartaoSantander\CartaoSantander\codigo.accdb'"

            con.Open()

     

            Dim comando As New OleDbCommand

     

            comando.CommandText = "SELECT codigos FROM tb_dados WHERE numeros = '" & TextBox1.Text & "'"

            comando.CommandType = CommandType.Text

            comando.Connection = con

            Dim leitor As OleDbDataReader

            leitor = comando.ExecuteReader()

            leitor.Read()

     

            Label1.Text = leitor("codigos")

            con.Close()

     

     

     

     

        End Sub

     

    E o erro continua o mesmo.

    Poderia explicar melhor?

    domingo, 4 de dezembro de 2011 18:49
  • A minha sub completa está assim:

     

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click

            Dim con As New OleDbConnection

            con.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source='C:\2011\2011 Informática\Visual basic 2010\CartaoSantander\CartaoSantander\codigo.accdb'"

            con.Open()

     

            Dim comando As New OleDbCommand

     

            comando.CommandText = "SELECT codigos FROM tb_dados WHERE numeros = '" & TextBox1.Text & "'"

            comando.CommandType = CommandType.Text

            comando.Connection = con

            Dim leitor As OleDbDataReader

            leitor = comando.ExecuteReader()

            leitor.Read()

     

            Label1.Text = leitor("codigos")

            con.Close()

     

     

     

     

        End Sub

    domingo, 4 de dezembro de 2011 18:50
  • Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click

            Dim con As New OleDbConnection

            con.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source='C:\2011\2011 Informática\Visual basic 2010\CartaoSantander\CartaoSantander\codigo.accdb'"

            con.Open()

     

            Dim comando As New OleDbCommand

     

            comando.CommandText = "SELECT codigos FROM tb_dados WHERE numeros = '" & TextBox1.Text & "'"

            comando.CommandType = CommandType.Text

            comando.Connection = con

            Dim leitor As OleDbDataReader

            leitor = comando.ExecuteReader()

          if leitor.HasRows Then

          do While leitor.Read()

            Label1.Text = leitor("codigos")

       Loop

    Else

    messagem.show("Nao existe informacao")

    End if

    Leitor.Close()

    con.Close()


    One word frees us of all the weight and pain of life: that word is love.
    domingo, 4 de dezembro de 2011 19:14
  • Permanece o mesmo erro com a seguinte mensagem:

    Tipo de dados incompatível na expressão de critério.

    o erro é referente à linha:

    leitor = comando.ExecuteReader()

    domingo, 4 de dezembro de 2011 21:13
  • Olá Anderson,

    A coluna numeros da sua tabela tb_dados é do tipo varchar ou int?

    Se a sua coluna for de alguma tipo para o armazenamento de números, vc deve remover as aspas simples do seu filtro.

    Assim:

      comando.CommandText = "SELECT codigos FROM tb_dados WHERE numeros = " & TextBox1.Text

    []s!


    Fernando Henrique Inocêncio Borba Ferreira
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.wordpress.com/
    Twitter: @ferhenrique
    segunda-feira, 5 de dezembro de 2011 01:37
    Moderador
  • O dados do acess são

    campo numeros

    Tipo de dados: número

    tamanho do campo: Inteiro

     

    campo codigos

    Tipo de dados: número

    tamanho do campo: Inteiro

     

    Ao retirar as aspas, aparece o erro:

     

    Conversion from string "SELECT codigos FROM tb_dados WHE" to type 'Double' is not valid.



    segunda-feira, 5 de dezembro de 2011 18:26
  • No campo TextBox1.Text vc esta utilizando virgula ou ponto ao digitar os valores?

    Caso esteja digitando virgulas, tente digitar ponto ao invés de virgulas

    Acredito que seja preciso formatar as entradas de deste campo antes de passar os dados para a consulta SQL

    []s!


    Fernando Henrique Inocêncio Borba Ferreira
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.wordpress.com/
    Twitter: @ferhenrique
    segunda-feira, 5 de dezembro de 2011 18:45
    Moderador
  • Estou digitando apenas números.
    terça-feira, 6 de dezembro de 2011 08:56
  • Olá Anderson, Acredito que tenha algo errado, pois se o tipo de dados de sua coluna na tabela é inteiro então não é necessário a utilização de aspas simples para fazer a consulta. Pois as aspas simples são utilizadas com campos de tipo texto. Poderia verificar novamente qual o tipo de dados desta coluna? []s!
    Fernando Henrique Inocêncio Borba Ferreira
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.wordpress.com/
    Twitter: @ferhenrique
    terça-feira, 6 de dezembro de 2011 11:09
    Moderador
  • Os dados são numéricos e quando tiro as aspas dá erro.
    terça-feira, 6 de dezembro de 2011 15:24
  • Olá Anderson,

    Vc pode postar seu código na integra?

    Pois a mensagem: Conversion from string "SELECT codigos FROM tb_dados WHE" to type 'Double' is not valid.

    Pare que de alguma forma esta tentando converter o comando SQL para double.

    []s!


    Fernando Henrique Inocêncio Borba Ferreira
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.wordpress.com/
    Twitter: @ferhenrique
    terça-feira, 6 de dezembro de 2011 23:39
    Moderador
  • Aqui está o código inteiro:
    Imports System.Data.OleDb
    Public Class Form1
        Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
            'TODO: This line of code loads data into the 'CodigoDataSet1.tb_dados' table. You can move, or remove it, as needed.
            Me.Tb_dadosTableAdapter.Fill(Me.CodigoDataSet1.tb_dados)
        End Sub
        Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
            Dim con As New OleDbConnection
            con.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source='C:\2011\2011 Informática\Visual basic 2010\CartaoSantander\CartaoSantander\codigo.accdb'"
            con.Open()
            Dim comando As New OleDbCommand
            comando.CommandText = "SELECT codigos FROM tb_dados WHERE numeros = '" & TextBox1.Text & "'"
            comando.CommandType = CommandType.Text
            comando.Connection = con
            Dim leitor As OleDbDataReader
            leitor = comando.ExecuteReader()
            leitor.Read()
            Label1.Text = leitor("codigos")
            con.Close()
        End Sub
        Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
            If TopMost = True Then
                TopMost = False
            Else
                TopMost = True
            End If
        End Sub
    End Class
       
    quarta-feira, 7 de dezembro de 2011 04:17
  • Fiz o teste com este código e funcionou:


    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    Dim con As New OleDbConnection
    con.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source='C:\Users\FernandoF\Desktop\codigo.accdb'"
    con.Open()
    Dim comando As New OleDbCommand
    comando.CommandText = "SELECT codigos FROM tb_dados WHERE numeros = " & TextBox1.Text & ""
    comando.CommandType = CommandType.Text
    comando.Connection = con
    Dim leitor As OleDbDataReader
    leitor = comando.ExecuteReader()
    leitor.Read()
    Label1.Text = leitor("codigos")
    con.Close()
    End Sub


    A tabela que criei possuia a seguinte estrutura:
    codigos - AutoNumber (PK)
    numeros - Number

    ps.: Repare que só mudei a sua query SQL

    []s!
    Fernando Henrique Inocêncio Borba Ferreira
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.wordpress.com/
    Twitter: @ferhenrique
    quarta-feira, 7 de dezembro de 2011 10:50
    Moderador
  • Eu tinha entendido que era para tirar as aspas simples e as duplas.

    Agora deu tudo certo.

    Obrigado pela colaboração.

    Ótimo final de ano e um ótimo 2012.

    quarta-feira, 7 de dezembro de 2011 19:16