none
Comando UPDATE no SQL Server com C# RRS feed

  • Pergunta

  • Bom dia

    Eu tenho duas tabelas

    Pedido

    Cod_Pedido PK, Cod_Cliente FK, Cod_Status FK, VlrTotal

    Itens

    Cod_Pedido FK, Cod_Produto FK, Qtde, ValorUn, Tamanho, Borda

    Eu preciso fazer um update na tabela itensPedido, porém para fazer esse update eu estou realizando o comando

    Update itensPedido SET Cod_Produto, Qtde, Valor_Un, Tamanho, Borda WHERE Cod_Pedido = @Cod_Pedido e quando eu uso esse comando, todos os itens da tabela ficam iguais, porque todos pertencem ao mesmo Cod_Pedido.

    Como eu deveria fazer isso ?

    Obrigado.


    sábado, 25 de outubro de 2014 12:34

Respostas

  • Isso mesmo Alexandre, no comando INSERT você passa apenas os parâmetros que serão inseridos e, para referenciar o código do pedido, é só passá-lo junto na inserção, desse jeito mesmo que você fez.

    Abs.


    Dicas de programação em .net, C# e SQL - http://smcode.com.br/blog.aspx

    domingo, 26 de outubro de 2014 15:04
  • Exatamente Alexandre. Basta passar o código do pedido e do produto, como fez acima.
    domingo, 26 de outubro de 2014 20:20

Todas as Respostas

  • Bom dia Alexandre,

    Analisando o seu comando, eu vi que você não passa nenhum parâmetro para os campos na hora do UPDATE. Vou te mostrar abaixo como fazer.

    -- SEU COMANDO ORIGINAL
    Update itensPedido 
    SET Cod_Produto, 
           Qtde, 
           Valor_Un, 
           Tamanho, 
           Borda 
    WHERE Cod_Pedido = @Cod_Pedido
    
    -- AGORA COM PASSAGEM DE PARÂMETROS
    Update itensPedido 
    SET Cod_Produto = @Cod_Produto, 
           Qtde              = @Qtde, 
           Valor_Un       = @Valor_Un, 
           Tamanho       = @Tamanho, 
           Borda            = @Borda 
    WHERE Cod_Pedido = @Cod_Pedido

    Porém a sua dúvida é sobre a atualização de todos os registros no seu comando. Isso está acontecendo porque todos os itens de pedido pertencem ao mesmo pedido. Por exemplo, se o pedido de código 10 possuir 5 itens, com esse seu comando todos os itens do pedido serão atualizados.

    Para solucionar esse problema, passe também o código do item do pedido (Cod_Produto) na sua cláusula WHERE, e não como um item que sofrerá a alteração no comando UPDATE.

    Update itensPedido 
    SET    Qtde              = @Qtde, 
           Valor_Un       = @Valor_Un, 
           Tamanho       = @Tamanho, 
           Borda            = @Borda 
    WHERE Cod_Pedido = @Cod_Pedido
    AND   Cod_Produto = @Cod_Produto

    Abs.


    Dicas de programação em .net, C# e SQL - http://smcode.com.br/blog.aspx


    sábado, 25 de outubro de 2014 13:38
  • Mas no caso se eu adicionar um novo item na tabela itens pedido, ele vai atualizar ?
    sábado, 25 de outubro de 2014 14:04
  • Alexandre,

    Esse novo item que você irá adicionar só será atualizado se você passar o código do pedido dele e o seu próprio código do item.

    Se você fizer uma atualização passando apenas o código do pedido, todos os itens desse pedido serão atualizados, mas caso você passar o código do pedido e o código do item, apenas esse item será atualizado.

    Abs.


    Dicas de programação em .net, C# e SQL - http://smcode.com.br/blog.aspx

    sábado, 25 de outubro de 2014 15:57
  • Eu usei esse código, porém ele não atualiza no banco.

    Estou passando o Cod_Pedido e Cod_Produto

    UPDATE Itens_Pedido SET Cod_Produto = @Cod_Produto, Qtde = @Qtde, Valor_Un = @Valor_Un, Tamanho = @Tamanho, Borda = @Borda, SubTotal = @SubTotal WHERE Cod_Pedido = @Cod_Pedido AND Cod_Produto = @Cod_Produto

    sábado, 25 de outubro de 2014 16:28
  • Alexandre,

    Se nenhuma linha foi atualizada você deve primeiro verificar se elas exitem na base. Faça o teste usando o código de pedido e produto que tentou fazer o update para verificar se as linhas existem:

    SELECT * FROM Itens_Pedido WHERE Cod_Pedido = @Cod_Pedido AND Cod_Produto = @Cod_Produto

    • Sugerido como Resposta Deric Ferreira sábado, 25 de outubro de 2014 16:36
    sábado, 25 de outubro de 2014 16:36
  • Alexandre, o pedido e o item de pedido existem no banco de dados? Você já verificou se a sua aplicação está enviando os parâmetros certos?

    Abs.


    Dicas de programação em .net, C# e SQL - http://smcode.com.br/blog.aspx

    sábado, 25 de outubro de 2014 17:02
  • Verifiquei sim Bruno.

    O programa funciona da seguinte forma. É um sistema de pizzaria em Windows Form, na tela de pedidos o cliente faz a inclusão do item em um DataGridView e após clicar em Salvar o pedido os itens que constam no DataGridView são salvos no banco através de um laço For, na tabela pedido são salvos os dados do cliente, na tabela itensPedido são salvos os itens, pois bem, caso o usuário queira fazer a inclusão de mais um item após já ter gravado, ele usa a função Editar, que carrega todos os dados da tabela itens pedido no DataGridView novamente, ele faz a inclusão do item e clica em atualizar, essa função que não esta funcionando, o que na teoria era pra incluir mais um item e salvar, o meu problema esta aí. Eu estava usando aquela primeira linha de comando, porém todos os itens passavam a ter o mesmo item.


    sábado, 25 de outubro de 2014 18:23
  • Alexandre, então nesse caso você tem que usar o comando INSERT para incluir um novo item, e não atualizar os já existentes.

    Com o comando UPDATE você irá atualizar algo que já está incluso no pedido, com o comando INSERT você vai adicionar algo novo no pedido.

    Para isso, faça um INSERT na tabela referenciando o COD_PEDIDO como referência de chave estrangeira na tabela.

    Abs.


    Dicas de programação em .net, C# e SQL - http://smcode.com.br/blog.aspx

    sábado, 25 de outubro de 2014 19:08
  • Para isso, faça um INSERT na tabela referenciando o COD_PEDIDO como referência de chave estrangeira na tabela.

    Agora, como eu referencio o COD_PEDIDO? Porque eu não consigo usar o WHERE no INSERT, correto?

    Ficaria dessa forma?

    INSERT INTO Itens_Pedido VALUES (@Cod_Pedido, @Cod_Produto, @Qtde, @Valor_Un, @Tamanho, @Borda, @SubTotal 

    sábado, 25 de outubro de 2014 19:15
  • Isso mesmo Alexandre, no comando INSERT você passa apenas os parâmetros que serão inseridos e, para referenciar o código do pedido, é só passá-lo junto na inserção, desse jeito mesmo que você fez.

    Abs.


    Dicas de programação em .net, C# e SQL - http://smcode.com.br/blog.aspx

    domingo, 26 de outubro de 2014 15:04
  • Exatamente Alexandre. Basta passar o código do pedido e do produto, como fez acima.
    domingo, 26 de outubro de 2014 20:20