如何删除数据库中的数据 table

How to delete a data in database table

我有这个从用户 @ID, @From, @To, @Title, @Message 那里获取这些信息的表格。然后将它们插入数据库 table.

如何使用@ID删除特定数据?用户将拥有一个包含所有 datatabledataGridView1,然后通过获取 CurrentCell 它将删除此特定数据。

private void delet_button_Click(object sender, EventArgs e)
{
    int i = dataGridView1.CurrentCell.RowIndex;

    string strid = dataGridView1[0, i].Value.ToString();
    //MessageBox.Show(strid);
    int id = Convert.ToInt32(strid);
           
    SqlCommand cmd = new SqlCommand();
    cmd.Connection = con;
    cmd.CommandType = CommandType.Text;
            
    cmd.CommandText = "Delete * from MessagesTable where [ID]=@ID ";
    
    cmd.Parameters.AddWithValue("@ID", id);

    MessageBox.Show("Message was deleted");
    BindGrid();
}

添加cmd.ExecuteNonQuery();

private void delet_button_Click(object sender, EventArgs e)
      {
            int i = dataGridView1.CurrentCell.RowIndex;
              string strid = dataGridView1[0, i].Value.ToString();
                //MessageBox.Show(strid);
                int id = Convert.ToInt32(strid);
               
    
                SqlCommand cmd = new SqlCommand();
                cmd.Connection = con;
                cmd.CommandType = CommandType.Text;
                
                cmd.CommandText = "Delete from MessagesTable where [ID]=@ID ";
            
                cmd.Parameters.AddWithValue("@ID", id);
                cmd.ExecuteNonQuery();
                MessageBox.Show("Message was deleted");
                BindGrid();
              
      }

你几乎可以肯定这一切都是错误的。你应该从 DataTable 开始。如果合适,您可以通过在数据适配器上调用 Fill 来查询数据库以填充它。然后,您可以通过 BindingSource 将 table 绑定到您的 DataGridView,您可以将其添加到设计器中,例如

var table = new DataTable();

using (var adapter = new SqlDataAdapter("SQL query here", "connection string here"))
{
    adapter.Fill(table);
}

BindingSource1.DataSource = table;
DataGridView1.DataSource = BindingSource1;

然后通过在 BindingSource 上调用 RemoveCurrent 将当前行标记为已删除。这将隐藏网格中的行,但不会影响该阶段的数据库。要将更改保存到数据库,您可以在适当配置的数据适配器上调用 Update,这可能与您最初调用 Fill 的适配器相同。您可以在用户删除行后立即调用 Update 来保存更改,或者您可以只在本地缓存所有更改 - 插入、更新和删除 - 然后在最后调用 Update 一次以保存所有一起改变。