DELETAR UMA LINHA DA LISTVIEW NO BANCO DE DADOS

VIVIANE 28/01/2013 16:47:54
#418229
Boa tarde a todos

Preciso de mais uma ajuda, preciso selecionar a linha no listview e clicar no botão remover e ela remover no banco de dados e não estou conseguindo, pois, o código que achei ele apaga todas as linhas da tabela e não apenas a linha que seleciono. Vou postar o meu código, quem puder me ajudar desde já agradeço.

void carregaDados()
{
try
{
listView1.Items.Clear();
if (txtData1.Text==[Ô][Ô])
{
comando.CommandText = [Ô]SELECT * FROM Produtos ORDER BY Data ASC[Ô];
}
else
{
comando.CommandText = [Ô]SELECT * FROM Produtos WHERE Data LIKE[ô][Ô] + txtData1.Text + [Ô]%[ô] ORDER BY Data ASC[Ô];
}
reader = comando.ExecuteReader();
while (reader.Read())
{
ListViewItem list = new ListViewItem(reader[0].ToString());
list.SubItems.Add(reader[1].ToString());
list.SubItems.Add(reader[2].ToString());
list.SubItems.Add(reader[3].ToString());
list.SubItems.Add(reader[4].ToString());
list.SubItems.Add(reader[5].ToString());
list.SubItems.Add(reader[6].ToString());
list.SubItems.Add(reader[7].ToString());
list.SubItems.Add(reader[8].ToString());
listView1.Items.AddRange(new ListViewItem[] { list });
}
reader.Close();
}
catch (Exception ex) { MessageBox.Show(ex.ToString()); }
}

private void listView1_SelectedIndexChanged(object sender, EventArgs e)
{
try
{
txtCodigo.Text = listView1.Items[listView1.FocusedItem.Index].SubItems[0].Text;
txtProduto.Text = listView1.Items[listView1.FocusedItem.Index].SubItems[1].Text;
txtMarca.Text = listView1.Items[listView1.FocusedItem.Index].SubItems[2].Text;
txtUN.Text = listView1.Items[listView1.FocusedItem.Index].SubItems[3].Text;
txtTransferir.Text = listView1.Items[listView1.FocusedItem.Index].SubItems[4].Text;
txtTransferida.Text = listView1.Items[listView1.FocusedItem.Index].SubItems[5].Text;
txtSaldo.Text = listView1.Items[listView1.FocusedItem.Index].SubItems[6].Text;
txtData.Text = listView1.Items[listView1.FocusedItem.Index].SubItems[7].Text;
status = [Ô]editar[Ô];
}
catch (Exception) { MessageBox.Show([Ô]Não exitem registros na lista.[Ô], [Ô]Warning[Ô], MessageBoxButtons.OK, MessageBoxIcon.Warning); }
}

private void Remover_Click(object sender, EventArgs e)
{
try
{
comando.CommandText = [Ô]DELETE FROM Produtos WHERE Id=[ô][Ô] + listView1.FocusedItem.Text + [Ô] [ô] [Ô];
comando.ExecuteNonQuery();
MessageBox.Show([Ô]Registro deletado com sucesso.[Ô], [Ô]Deletar[Ô], MessageBoxButtons.OK, MessageBoxIcon.Warning);
carregaDados();
btnLimpar.PerformClick();
}
catch (Exception ex) { MessageBox.Show(ex.ToString()); }
}
KERPLUNK 28/01/2013 17:01:30
#418233
Resposta escolhida
Suponho que o campo chave do seu produto seja a coluna 0:

comando.CommandText = [Ô]DELETE FROM Produtos WHERE Id=[ô][Ô] + listView1.Items[listView1.FocusedItem.Index].SubItems[0].Text + [Ô] [ô] [Ô];


Assim, deve funcionar, mas preste atenção em alguns detalhes e conselhos:
1 - Evite usar o índice de coluna do DataReader, por questão de indexação, a ordem das colunas pode mudar.
2 - Use classes para representar o produto e preencher o seu listview com instâncias dessa classe em um List<T>
3 - Não use concatenação de string para formular SQL, isso abre uma brecha enorme para SQL Injection
VIVIANE 28/01/2013 17:27:28
#418243
Boa tarde KERPLUNK

Tentei o exemplo que você postou mas não deu certo.

Agradeço a atenção.

KERPLUNK 28/01/2013 17:45:35
#418248
[Ô]Não deu certo[Ô] é meio vago, alguma mensagem de erro? Você depurou o código e verificou o valor sendo passado para a query?
VIVIANE 29/01/2013 10:07:49
#418286
Boa dia a todos

Então KERPLUNK ele continua deletando todos os item da tabela e não apenas o que eu seleciono na listview.

Se alguém puder me ajudar desde já agradeço a atenção.
VIVIANE 29/01/2013 10:30:34
#418288
Bom dia a todos

Obrigado a todos pela ajuda principalmente o KERPLUNK, já consegui resolver o problema, o código estava certo o problema estava na minha tabela, a minha configuração do ID não estava numerando automaticamente, então os valores estavam ficando nulos e ele não estava encontrando o ID na hora de Deletar.

Obrigado a todos pela atenção.
Tópico encerrado , respostas não são mais permitidas