none
INSERT não busca valor correto no ListBox RRS feed

  • Pergunta

  •  

    Bom dia!

     

    Desenvolvi o seguinte select para retornar todos os PRODUTOS de determinada CATEGORIA que NÃO foram cadastrados numa REVENDA:

    Code Snippet

    SELECT p.Produto

    FROM Produtos AS p LEFT OUTER JOIN ProdutoRevenda AS pr

    ON p.ProdutoID = pr.ProdutoID

    WHERE (p.CategoriaID = @CategoriaID) AND (NOT EXISTS

    (SELECT ProdutoID

    FROM ProdutoRevenda AS pr

    WHERE (ProdutoID = p.ProdutoID) AND (RevendaID = @RevendaID)))

     

     

    Essa query me retorna exatamente o que quero dentro de um ListBox (estou usando ASP.NET C#), daí seleciono os items que quero e faço o INSERT:

     

    Code Snippet

    INSERT INTO ProdutoRevenda

    (ProdutoID, RevendaID)

    VALUES (@ProdutoID,@RevendaID)

     

     

    O problema é que, mesmo linkando a propriedade Value do ListBox para Produtos.ProdutoID, o INSERT me retorna valores como -1, -2, -3, etc., conforme a ordem do ListBox. O código C# que estou usando para inserção é o seguinte:

     

    Code Snippet

    using (tadProdutoRevenda prodRev = new tadProdutoRevenda())

    {

    foreach (ListItem item in lsbEsquerda.Items)

    {

    if (item.Selected)

    {

    prodRev.InsertQuery(int.Parse(item.Value), 1);

    }

    }

    }

     

    //mantive o parâmetro de RevendaID fixo como 1 para fazer os testes.

     

     

    Não sei se o problema está na query ou no código, resolvi postar nessa seção pois vi que o pessoal ajuda mesmo. Agradeço desde já por qualquer ajuda.

     

    Um abraço!

     

    quarta-feira, 27 de fevereiro de 2008 13:14

Todas as Respostas

  • João,

     

    Se consegui entender, o que esta ocorrendo é na seleção dos dados dentro do listbox, ao invês de obter o valor do campo o mesmo esta retornando o valor índice relacionado ao item do banco.

    quarta-feira, 27 de fevereiro de 2008 14:34
  • Junior,

     

    Foi exatamente o que imaginei. Entretanto, isso é estranho porque estou buscando o Value e não o Index. Só para constar, antes de montar esse Select com NOT EXISTS, eu tinha um Select padrão dos Produtos e o código funcionava normalmente. Modifiquei porque não é interessante mostrar produtos já cadastrados na revenda.

    quarta-feira, 27 de fevereiro de 2008 14:52
  •  

    Junior,

     

    Tente trocar not exists para not in.

    quarta-feira, 27 de fevereiro de 2008 15:29
  • Thiago,

     

    Não consegui montar a query com NOT IN corretamente. Poderia me dar um exemplo?

     

    Obrigado.

    quarta-feira, 27 de fevereiro de 2008 16:02
  •  

    SELECT p.Produto

    FROM Produtos AS p LEFT OUTER JOIN ProdutoRevenda AS pr

    ON p.ProdutoID = pr.ProdutoID

    WHERE (p.CategoriaID = @CategoriaID) AND (p.ProdutoID Not in

    (SELECT ProdutoID

    FROM ProdutoRevenda AS pr

    WHERE (ProdutoID = p.ProdutoID) AND (RevendaID = @RevendaID)))

     

    quarta-feira, 27 de fevereiro de 2008 16:08
  • Thiago

     

    Quando executo a query o Management Studio retorna o erro:

    Code Snippet

    Msg 208, Level 16, State 1, Line 1

    Invalid object name 'Produtos'.

     

     

    quarta-feira, 27 de fevereiro de 2008 16:18
  • Alguma pista? Movam para a seção de ASP.NET se acharem adequado.

    quinta-feira, 28 de fevereiro de 2008 19:09