我已经在这个代码上工作了几个小时,现在它显示了信息已成功删除的消息框,但它没有删除数据库,我似乎无法找到我出错的地方。
private void simpleButton5_Click(object sender, EventArgs e)
{
for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
DataGridViewRow delrow = dataGridView1.Rows[i];
if (delrow.Selected == true)
{
//A YesNo enabled messagebox
DialogResult dialogResult = DevExpress.XtraEditors.XtraMessageBox.Show("Are you sure you want delete the selected client's information?", " ", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
//An if statement for a yes selected button on the messagebox
if (dialogResult == DialogResult.Yes)
{
dataGridView1.Rows.RemoveAt(i);
try
{
Conn.Open();
SqlCommand Scd = new SqlCommand("Delete From Client WHERE ClientID=" + i + "" ,Conn);
Scd.ExecuteNonQuery();
Conn.Close();
DevExpress.XtraEditors.XtraMessageBox.Show("You have successfully deleted the selected client's information on the system", " ", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
catch (Exception ex)
{
DevExpress.XtraEditors.XtraMessageBox.Show(ex.ToString());
}
}
//An if statement for a no selected button on the messagebox
else if (dialogResult == DialogResult.No)
{
//Closing this form and opening the main menu form
this.Hide();
MainMenu mm = new MainMenu();
mm.ShowDialog();
this.Close();
this.Dispose();
}
}
}
}
答案 0 :(得分:5)
"Delete From Client WHERE ClientID=" + i + ""
您正在删除ClientID = i
的行。但等等i
?它是for循环中的temp变量。因此,除非数据网格视图包含数据库中的所有行,并且ID以1开头,并且每次删除其他客户端数据时ID都会增加1。
您可能会执行WHERE ClientID=" + delrow["ClientID"]
之类的操作或以其他方式获取实际ID。
但作为旁注。帮自己一个忙,并使用Parameterized Sql来阻止sql注入。
答案 1 :(得分:4)
ClientID
可能不是i
(这只是行索引)。从行数据中获取真实的客户端ID。
int clientID = (int)dataGridView1.Rows[i].Cells[indexOfClientIDColumn].Value;
SqlCommand Scd =
new SqlCommand("Delete From Client WHERE ClientID=" + clientID , Conn);
或按名称获取正确的列
int clientID = (int)dataGridView1.Rows[i].Cells["ClientID"].Value;
还最好使用command parameters。
答案 2 :(得分:2)
根据你的循环,你的变量i是RowIndex,它总是为0,1,2,3,4 ...... n
IMO,我不认为您在Client表中获得了具有这些值的ClientID。你能仔细检查一下你的键值是否与那些相同。
您需要从&#34; DataGridViewRow&#34;
获取ClientID答案 3 :(得分:2)
我相信错误在这里:
SqlCommand Scd = new SqlCommand("Delete From Client WHERE ClientID=" + i + "" ,Conn);
您将ClientID作为datagrid的行传递,而不是真实ID。