OBTER DADOS DO BD

WILLVIDAL 11/06/2012 22:43:32
#403948
Boa noite,
Comecei a trabalhar com VB.net, firebird 2.5, ado.net, e estou com alguma dúvidas

No VB6 quando eu queria exibir algum dado do BD eu fazia assim:

Dim TB as new adodb.recodrset
tb.open [Ô]select * from cliente[Ô],conexão
msgbox tb!nome

Isso me exibiria o nome do cliente, mas qual a melhor maneira de fazer isso no .net agora ?
KERPLUNK 11/06/2012 23:22:23
#403949
Resposta escolhida
dim cmd as new FbCommand
cmd.commandtext = [Ô]select * from cliente[Ô]
cmd.connection = FbConnection [ô]já previamente conectado
dim rs as FbDataReader = cmd.ExecuteReader
messagebox.show rs.GetString([Ô]Nome[Ô])


algo assim...
WILLVIDAL 11/06/2012 23:30:28
#403950
Desse modo dá certo, mas eu preciso fazer um movelast pra pegar o ultimo registro e não dá pra fazer isso com um datareader, preciso aprender fazer com o dataser ou datatable.
KERPLUNK 12/06/2012 08:53:36
#403959
Precisa ver um registro específico? Use os critérios da cláusula where...
WILLVIDAL 12/06/2012 09:37:23
#403969
KERPLUNK, na verdade não é um registro especifico, eu to sentindo falta da função Movelast, Movefirst, Moveprevious que eu uso nas recordsets no VB6. Neste caso eu queria pegar o código do último item cadastrado e somar +1 para gerar o novo código do próximo registro, pesquisando pela net eu vi que existe o tal de Datarow, achei um pouco mais complicado, mas pelo jeito essa deve ser a solução para este caso né ?
KERPLUNK 12/06/2012 09:42:30
#403971
Citação:

mas pelo jeito essa deve ser a solução para este caso né ?


Não. Se você precisa pegar o maior valor de uma coluna e somar um, você usa a função Max do SQL, assim:
Select max(Coluna) + 1 from tabela

No código ficaria:
dim cmd as new FbCommand
cmd.commandtext = [Ô]Select max(codigo) + 1 from cliente[Ô]
cmd.connection = FbConnection [ô]já previamente conectado
dim rs as FbDataReader = cmd.ExecuteReader
messagebox.show rs.GetInt32(0)

Você deve modificar o modo de pensar nas soluções, só isso...
WILLVIDAL 12/06/2012 09:57:41
#403972
KERPLUNK, ai sim !!!! era exatamente o que eu precisava, vc disse tudo, mudar o jeito de pensar na solução.
Só mais uma coisa, se eu faço assim:

dim cmd as new FbCommand
cmd.commandtext = [Ô]Select max(codigo) + 1 from cliente[Ô]
cmd.connection = FbConnection [ô]já previamente conectado
dim rs as FbDataReader = cmd.ExecuteReader
messagebox.show rs.GetInt32(0)

Vai dar uma mensagem There no data to read

Se eu coloco: rs.read() antes de messagebox.show rs.GetInt32(0), ai dá certo.
é assim mesmo ?
KERPLUNK 12/06/2012 10:14:28
#403973
dim cmd as new FbCommand
cmd.commandtext = [Ô]Select max(codigo) + 1 from cliente[Ô]
cmd.connection = FbConnection [ô]já previamente conectado
dim rs as FbDataReader = cmd.ExecuteReader
if rs.HasRows then
rs.Read()
messagebox.show rs.GetInt32(0)
end if
KERPLUNK 12/06/2012 10:21:27
#403974
O DataReader, é readOnly e forwardOnly, ou seja, só se avança nos registros e somente leitura. Para ler o próximo registro na sequencia, use o método Read() do mesmo. Então você pode perguntar: Mas e se eu quiser um modo de leitura onde avanço e retrocedo como quiser, mas usando um datareader? Usando o DataReader propriamente não tem como, mas, você pode usar a orientação a objeto para isso, leia o datareader um a um, preenchendo uma lista de objetos e navegue nesta lista de objetos e não no datareader. O truque é: conectar e ler tudo que preciso apenas uma vez, ir ao banco de dados o mínimo possível.
WILLVIDAL 12/06/2012 20:44:39
#404019
Valew KERPLUNK !
Salvou minha vida mais uma vez ! Muito Obrigado ...
Tópico encerrado , respostas não são mais permitidas