所以我有这个代码用于删除mySQL服务器数据库中的一行,从我的列表框中选择的内容来判断。这是我要删除行的代码:
private void remove_btn_Click(object sender, EventArgs e)
{
try
{
if (Calls_lsb.SelectedItem == null)
MessageBox.Show("Please select an item for deletion.");
}
else
{
int i = Calls_lsb.SelectedIndex;
if (i > 0)
{
SqlConnection connection = new SqlConnection(//My Connection String);
string sqlStatement1 = "DELETE FROM Records WHERE CallID = @Id";
string sqlStatement2 = "DELETE FROM Calls WHERE CallID = @Id";
connection.Open();
SqlCommand cmd1 = new SqlCommand(sqlStatement1, connection);
cmd1.Parameters.AddWithValue("@Id", Calls_lsb.Items[i]);
cmd1.ExecuteNonQuery();
SqlCommand cmd2 = new SqlCommand(sqlStatement2, connection);
cmd2.Parameters.AddWithValue("@Id", Calls_lsb.Items[i]);
cmd2.ExecuteNonQuery();
connection.Close();
Calls_lsb.Items.Remove(Calls_lsb.Items[i]);
}
else
{
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
我没有例外,我有类似的代码,添加工作正常的记录。我试着踩到代码,但一切都好看。它只是不删除数据库中的行。它从列表中删除了正确的项目,而不是数据库。
如果有人能够对这种情况有所启发,那就太棒了,谢谢!
编辑:好的,我似乎解决了这个问题。我刚删除了整个i =选择的索引,并用'(Calls_lsb.SelectedIndex + 1)'替换'Calls_lsb.Items [i]'。我真的不明白为什么当我尝试向i添加1时我得到一个例外,因为这基本上是做同样的事情。
答案 0 :(得分:0)
替换下面的代码。
cmd1.Parameters.AddWithValue("@Id", Calls_lsb.Items[i]);
//with
cmd1.Parameters.AddWithValue("@Id", Calls_lsb.Items[i].Value);
和
cmd2.Parameters.AddWithValue("@Id", Calls_lsb.Items[i]);
// with
cmd2.Parameters.AddWithValue("@Id", Calls_lsb.Items[i].Value);