Fórum VB.NET 2005 - Erro DataReader - SQL - InvalidCastException #5857

20/05/2009

0

Boa tarde,

Estou com o seguinte problema:


******************************************************************************

1- Estou fazendo uma busca (Select) no banco de dados para visualizar um campo e gravar o
dado em uma variável, mas está ocorrendo um  erro: "InvalidCastException"

******************************************************************************
2- Caso eu digite o comando abaixo no BANCO, vem a resposta correta.

SELECT   descr, marca FROM pcprod where codigo ="000158"

******************************************************************************

3- A Estrutura da Tabela segue abaixo:

CREATE TABLE [pcprod] (
  [codigo] NVARCHAR(20) NOT NULL ON CONFLICT ABORT,
  [descr] NVARCHAR(40),
  [codigoint] NVARCHAR(20),
  [preco] NUMERIC(5, 7),
  [preco2] NUMERIC(5, 7),
  [marca] NVARCHAR(20),
  [qtde] NUMERIC(5, 7),
  CONSTRAINT [sqlite_autoindex_pcprod_1] PRIMARY KEY ([codigo]));
 
******************************************************************************

4- Mensagem de ERRO:
 
System.InvalidCastException was unhandled
  Message="InvalidCastException"
  StackTrace:
    at Microsoft.VisualBasic.CompilerServices.Conversions.ToInteger()
    at PocketClient.FrmLeitura.Gera()
    at PocketClient.FrmLeitura.txtquantidade_KeyDown()
    at System.Windows.Forms.Control.OnKeyDown()
    at System.Windows.Forms.Control.WnProc()
    at System.Windows.Forms.Control._InternalWnProc()
    at Microsoft.AGL.Forms.EVL.EnterMainLoop()
    at System.Windows.Forms.Application.Run()
    at PocketClient.FrmMain.Main()

 
******************************************************************************

5 - Código Fonte e o ponto onde ocorre o ERRO.


    Public Sub AbreBD()
        If Me.conn.State <> Data.ConnectionState.Open Then
            Me.conn.Open()
        End If
    End Sub


    'Executa o SQL e devolve um DataReader
    Public Function SQLRetornaDR(ByVal ComandoSQL As String) As SQLite.SQLiteDataReader
        comm = conn.CreateCommand
        comm.CommandText = ComandoSQL
        Return comm.ExecuteReader
    End Function

   Private Sub Gera()

        Dim BdMain As New ClsBD
        Dim dr As Data.SQLite.SQLiteDataReader
        Dim TextoMarca as String
    Dim CodBarras as String = "000158"

        BdMain.AbreBD()

        'Carrega as informações da tabela Atual
    drMarca = BdMarca.SQLRetornaDR("SELECT  descr, marca FROM pcprod where codigo = " & CodBarras)
        dr = BdMain.SQLRetornaDR("SELECT  descr, marca FROM pcprod where codigo = " & CodBarras)

        TextoMarca  = dr("marca")  (NESTE PONTO OCORRE O ERRO)

******************************************************************************


Obrigado,

Ernany

Ernany

Ernany

Responder

Posts

20/05/2009

Fabio Mans

Marca não é NULL?

Faça o teste abaixo.



TextoMarca = IIf(IsDBNull(dr("MARCA")), Nothing, dr("MARCA"))

Se marca for null TextoMarca não recebe nada, caso contrário recebe o que valor.

Espero ter ajudado.




Responder

Gostei + 0

20/05/2009

Ernany

Boa tarde,

Quando eu acesso pelo  banco de dados é mostrado os valores, mas pelo porgrama não está
aparecendo .... Está vindo vazio, por isso o ERRO.

SELECT   descr, marca FROM pcprod where codigo ="000158"


*********************************************************************
1 - Código Fonte e o ponto onde ocorre o ERRO. Onde pode  estar o ERRO ???


    Public Sub AbreBD()
        If Me.conn.State <> Data.ConnectionState.Open Then
            Me.conn.Open()
        End If
    End Sub


    'Executa o SQL e devolve um DataReader
    Public Function SQLRetornaDR(ByVal ComandoSQL As String) As SQLite.SQLiteDataReader
        comm = conn.CreateCommand
        comm.CommandText = ComandoSQL
        Return comm.ExecuteReader
    End Function

   Private Sub Gera()

        Dim BdMain As New ClsBD
        Dim dr As Data.SQLite.SQLiteDataReader
        Dim TextoMarca as String
        Dim CodBarras as String = "000158"

        BdMain.AbreBD()

        'Carrega as informações da tabela Atual
        
        dr = BdMain.SQLRetornaDR("SELECT  descr, marca FROM pcprod where codigo = " & CodBarras)

        TextoMarca  = dr("marca")  (NESTE PONTO OCORRE O ERRO)

*********************************************************************

CREATE TABLE [pcprod] (
  [codigo] NVARCHAR(20) NOT NULL ON CONFLICT ABORT,
  [descr] NVARCHAR(40),
  [codigoint] NVARCHAR(20),
  [preco] NUMERIC(5, 7),
  [preco2] NUMERIC(5, 7),
  [marca] NVARCHAR(20),
  [qtde] NUMERIC(5, 7),
  CONSTRAINT [sqlite_autoindex_pcprod_1] PRIMARY KEY ([codigo]));


*********************************************************************
Obrigado,

Ernany

 
Responder

Gostei + 0

20/05/2009

Fabio Mans

Utilize o código abaixo.

dr = BdMain.SQLRetornaDR("SELECT  descr, marca FROM pcprod where codigo = " & CodBarras)

 If dr.HasRows Then
            Do While dr.Read
               TextoMarca  = dr("marca")
            Loop
        End If

Responder

Gostei + 0

21/05/2009

Fabio Mans

Conseguiu resolver?
Responder

Gostei + 0

21/05/2009

Ernany

Boa tarde,

Obrigado. Funcionou. O  erro estava no "Select", faltava colocar entre aspas simples a variável CodBarras.

Obrigado,

Até a próxima,

Ernany
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar