none
NextResult não tá funcionando RRS feed

  • Pergunta

  • Olá a todos, em um formulário eu coloquei dois DataGridViews e um botão. Ele só tras as informações do primeiro comando, quando dou o NextResult ele não trás as informações do segundo comando. Tentei fazer com o SQL Server e tb não funcinou.

    Dim con As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Meus documentos\VB\Receitas\Banco\Receitas.mdb;Persist Security Info=False")

    Dim dr As OleDbDataReader

    Dim comando As OleDbCommand

    Dim frase As String

    frase = "select * from Alimentos; " & _

    "select * from Classificacao"

    comando = New OleDbCommand(frase, con)

    con.Open()

    dr = comando.ExecuteReader

    ComboBox1.DataSource = dr

    ComboBox1.ValueMember = "CodigoAlimento"

    ComboBox1.DisplayMember = "DescricaoAlimento"

     

    dr.NextResult()

    ComboBox2.DataSource = dr

    ComboBox2.ValueMember = "CodigoClassificacao"

    ComboBox2.DisplayMember = "DescricaoClassificacao"

     

    Alguém pode me ajudar em como resolver isso?

    Obrigado!

    Marcelo

     

    sexta-feira, 5 de janeiro de 2007 11:36

Respostas

  • Olá Marcelo,

    O Jet não suporta isto. Você terá de usar OleDbCommands diferentes para cada um dos SELECTs.

    []

    sexta-feira, 5 de janeiro de 2007 22:10
  • Olá Marcelo,

    Primeiro é preciso definir o que é melhor no teu caso específico. Você precisa de performance, facilidade de manutenção, reaproveitamento de código?

    Veja que as vezes é preciso sacrificar um pouco um destes vetores para melhorar outro.

    Certamente executar um único SP que retorne os três resultsets economiza recursos do sistema. Agora, se o ganho no seu caso particular realmente compensa aí é outra estória.

    Do ponto de vista da manutenção e reaproveitamento do código, SPs separadas podem ser uma alternativa melhor. Se você ainda não encontrou um gargalo de performance na tua aplicação, o caminho é este.

    []

    terça-feira, 16 de janeiro de 2007 12:02

Todas as Respostas

  • Olá Marcelo,

    O Jet não suporta isto. Você terá de usar OleDbCommands diferentes para cada um dos SELECTs.

    []

    sexta-feira, 5 de janeiro de 2007 22:10
  • Olá Alfred , desculpe por não ter escrito antes, é que tive a semana passada de folga. Cara eu só estava tentando fazer assim porque vi que o NextResult era legal e achei ele no help do vs2005 no link: ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.NETDEVFX.v20.en/cpref4/html/M_System_Data_OleDb_OleDbDataReader_NextResult.htm

    Será que colocaram errado no help?

    Valeu!

    Marcelo

    segunda-feira, 15 de janeiro de 2007 14:25
  • Olá Marcelo,

    A documentação está correta. O provider OLEDB suporta o método, mas o JET não.

    Veja que o OLEDB é um proverder genérico que suporta bancos de dados como SQL Server, Oracle, Access (JET na verdade, já que Access é o produto que acessa bancos de dados JET), etc.

    Nem todos os bancos de dados, no entanto, suportam todos os recursos disponibilizados pela API do OLEDB Provider.

    Neste caso especificamente, o OLEDB acessando SQL Server suporta NextResultSet, acessando JET não suporta e quanto ao Oracle não sei dizer.

    []

    segunda-feira, 15 de janeiro de 2007 16:36
  • Beleza Alfred, valeu pela explicação!!!!

    Só mais uma dúvida. Li em um artigo que a parte de abrir a conexão, mesmo em pool, é uma das tarefas mais custosas de um comando, sendo assim vale a pena eu carregar um comand com 2 selects e rolar os resultados com o NextResult ai invés de rodar três vezes o comand certo?

     

    Obrigado!

    Marcell

    segunda-feira, 15 de janeiro de 2007 16:51
  • Olá Marcelo,

    Não sei se eu entendi muito bem a pergunta, mas vamos lá.

    O Command não abre a conexão automaticamente.

    Um DataAdapter, abrirá a conexão caso ela esteja fechada e ao seu término o deixará no mesmo estado em que o encontrou, ou seja, se a conexão estava aberta, ela permanece aberta. Se ela estava fechada, ela será fechada.

    Tanto para os Commands quanto para os DataAdapters, você poderá abrir a conexão, executar diversos comandos e fechar a conexão. Isto é inclusive o modo recomendado de se fazer.

    []

    segunda-feira, 15 de janeiro de 2007 21:05
  • Bom dia, é o seguinte, não estou usando DataAdapters, uso somente DataReaders e Commands (com SQL Server) "executando" Stored Procedures. Minha dúvida é, se eu em uma tela tiver que carregar três informações de tabelas diferentes é melhor eu usar uma Stored Procedure que retorne as três informações e usar o NextResult para pegar as outras consultas do que "executar" três Stored Procedures uma para cada consulta. Minha dúvida é essa.

     

    Agradeço a atenção!

    Marcelo

    terça-feira, 16 de janeiro de 2007 10:05
  • Olá Marcelo,

    Primeiro é preciso definir o que é melhor no teu caso específico. Você precisa de performance, facilidade de manutenção, reaproveitamento de código?

    Veja que as vezes é preciso sacrificar um pouco um destes vetores para melhorar outro.

    Certamente executar um único SP que retorne os três resultsets economiza recursos do sistema. Agora, se o ganho no seu caso particular realmente compensa aí é outra estória.

    Do ponto de vista da manutenção e reaproveitamento do código, SPs separadas podem ser uma alternativa melhor. Se você ainda não encontrou um gargalo de performance na tua aplicação, o caminho é este.

    []

    terça-feira, 16 de janeiro de 2007 12:02
  • Beleza Alfred, tenho ciência disto que vc falou que tenho que pesar todas as possibilidades. Mas neste caso minha dúvida era justamente essa, desprezandos os outros parâmetros e ficando só com a velocidade é melhor uma SP com várias consultas de mesmo escopo.

    Valeu pela atenção e pelas explicações!

    Marcelo!

    sexta-feira, 19 de janeiro de 2007 17:59