Usuário com melhor resposta
Comando UPDATE no SQL Server com C#

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.
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
- Sugerido como Resposta Ricardo Barbosa Cortes terça-feira, 28 de outubro de 2014 16:13
- Marcado como Resposta Ricardo Barbosa Cortes terça-feira, 28 de outubro de 2014 17:45
-
Exatamente Alexandre. Basta passar o código do pedido e do produto, como fez acima.
- Marcado como Resposta Ricardo Barbosa Cortes terça-feira, 28 de outubro de 2014 17:45
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
- Editado Bruno Destro sábado, 25 de outubro de 2014 13:40
-
-
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
- Sugerido como Resposta Durval RamosModerator segunda-feira, 27 de outubro de 2014 16:17
-
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
-
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
-
-
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.
- Editado Alexandre H S Bueno sábado, 25 de outubro de 2014 18:58 Erro gramatical
-
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
- Sugerido como Resposta Durval RamosModerator segunda-feira, 27 de outubro de 2014 16:16
-
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
-
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
- Sugerido como Resposta Ricardo Barbosa Cortes terça-feira, 28 de outubro de 2014 16:13
- Marcado como Resposta Ricardo Barbosa Cortes terça-feira, 28 de outubro de 2014 17:45
-
Exatamente Alexandre. Basta passar o código do pedido e do produto, como fez acima.
- Marcado como Resposta Ricardo Barbosa Cortes terça-feira, 28 de outubro de 2014 17:45