Fórum VB.NET 2005 - Erro DataReader - SQL - InvalidCastException #5857
20/05/2009
0
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
Curtir tópico
+ 0Posts
20/05/2009
Fabio Mans
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.
Gostei + 0
20/05/2009
Ernany
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
Gostei + 0
20/05/2009
Fabio Mans
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
Gostei + 0
21/05/2009
Fabio Mans
Gostei + 0
21/05/2009
Ernany
Obrigado. Funcionou. O erro estava no "Select", faltava colocar entre aspas simples a variável CodBarras.
Obrigado,
Até a próxima,
Ernany
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)